예제 #1
0
 void UnregisterEvents()
 {
     OnPlayerConnectEvent.Unregister(HandlePlayerConnect);
     OnPlayerDisconnectEvent.Unregister(HandlePlayerDisconnect);
     OnPlayerActionEvent.Unregister(HandlePlayerAction);
     UnhookEvents();
 }
예제 #2
0
        static bool GotoLevel(Player p, Level lvl)
        {
            if (p.level == lvl)
            {
                Player.Message(p, "You are already in {0}%S.", lvl.ColoredName); return(false);
            }
            if (!lvl.CanJoin(p))
            {
                return(false);
            }

            p.Loading = true;
            Entities.DespawnEntities(p);
            Level oldLevel = p.level;

            p.level = lvl;
            p.SendMap(oldLevel);

            Position pos = lvl.SpawnPos;
            byte     yaw = lvl.rotx, pitch = lvl.roty;

            OnPlayerSpawningEvent.Call(p, ref pos, ref yaw, ref pitch, false);
            Entities.SpawnEntities(p, pos, new Orientation(yaw, pitch));
            CheckGamesJoin(p, oldLevel);

            if (p.level.ShouldShowJoinMessage(oldLevel))
            {
                string msg = p.level.IsMuseum ? " %Swent to the " : " %Swent to ";
                Chat.MessageGlobal(p, p.ColoredName + msg + lvl.ColoredName, false, true);
                OnPlayerActionEvent.Call(p, PlayerAction.JoinWorld, lvl.name);
            }
            return(true);
        }
예제 #3
0
 protected override void OnStart()
 {
     base.OnStart();
     OnPlayerConnectEvent.Register(HandlePlayerConnect, Priority.Low);
     OnPlayerDisconnectEvent.Register(HandlePlayerDisconnect, Priority.Low);
     OnPlayerActionEvent.Register(HandlePlayerAction, Priority.Low);
 }
예제 #4
0
 void RegisterEvents()
 {
     OnPlayerConnectEvent.Register(HandlePlayerConnect, Priority.Low);
     OnPlayerDisconnectEvent.Register(HandlePlayerDisconnect, Priority.Low);
     OnPlayerActionEvent.Register(HandlePlayerAction, Priority.Low);
     HookEvents();
 }
예제 #5
0
        /// <summary> Hooks IRC events so they are handled. </summary>
        public void Hook()
        {
            if (hookedEvents)
            {
                return;
            }
            hookedEvents = true;

            OnPlayerActionEvent.Register(HandlePlayerAction, Priority.Low);
            OnShuttingDownEvent.Register(HandleShutdown, Priority.Low);
            OnGroupLoadEvent.Register(HandleGroupLoad, Priority.Low);

            OnChatEvent.Register(HandleChat, Priority.Low);
            OnChatSysEvent.Register(HandleChatSys, Priority.Low);
            OnChatFromEvent.Register(HandleChatFrom, Priority.Low);

            // Regster events for incoming
            bot.connection.Listener.OnNick              += Listener_OnNick;
            bot.connection.Listener.OnRegistered        += Listener_OnRegistered;
            bot.connection.Listener.OnAction            += Listener_OnAction;
            bot.connection.Listener.OnPublic            += Listener_OnPublic;
            bot.connection.Listener.OnPrivate           += Listener_OnPrivate;
            bot.connection.Listener.OnError             += Listener_OnError;
            bot.connection.Listener.OnQuit              += Listener_OnQuit;
            bot.connection.Listener.OnJoin              += Listener_OnJoin;
            bot.connection.Listener.OnPart              += Listener_OnPart;
            bot.connection.Listener.OnDisconnected      += Listener_OnDisconnected;
            bot.connection.Listener.OnChannelModeChange += Listener_OnChannelModeChange;
            bot.connection.Listener.OnNames             += Listener_OnNames;
            bot.connection.Listener.OnKick              += Listener_OnKick;
            bot.connection.Listener.OnKill              += Listener_OnKill;
            bot.connection.Listener.OnPrivateNotice     += Listener_OnPrivateNotice;
        }
예제 #6
0
        /// <summary> Unhooks IRC events so they are no longer handled. </summary>
        public void Unhook()
        {
            if (!hookedEvents)
            {
                return;
            }
            hookedEvents = false;
            userMap.Clear();

            OnPlayerActionEvent.Unregister(HandlePlayerAction);
            OnShuttingDownEvent.Unregister(HandleShutdown);
            OnGroupLoadEvent.Unregister(HandleGroupLoad);

            OnChatEvent.Unregister(HandleChat);
            OnChatSysEvent.Unregister(HandleChatSys);
            OnChatFromEvent.Unregister(HandleChatFrom);

            // Regster events for incoming
            bot.connection.Listener.OnNick              -= Listener_OnNick;
            bot.connection.Listener.OnRegistered        -= Listener_OnRegistered;
            bot.connection.Listener.OnAction            -= Listener_OnAction;
            bot.connection.Listener.OnPublic            -= Listener_OnPublic;
            bot.connection.Listener.OnPrivate           -= Listener_OnPrivate;
            bot.connection.Listener.OnError             -= Listener_OnError;
            bot.connection.Listener.OnQuit              -= Listener_OnQuit;
            bot.connection.Listener.OnJoin              -= Listener_OnJoin;
            bot.connection.Listener.OnPart              -= Listener_OnPart;
            bot.connection.Listener.OnDisconnected      -= Listener_OnDisconnected;
            bot.connection.Listener.OnChannelModeChange -= Listener_OnChannelModeChange;
            bot.connection.Listener.OnNames             -= Listener_OnNames;
            bot.connection.Listener.OnKick              -= Listener_OnKick;
            bot.connection.Listener.OnKill              -= Listener_OnKill;
            bot.connection.Listener.OnPrivateNotice     -= Listener_OnPrivateNotice;
        }
예제 #7
0
        internal static void ToggleAfk(Player p, string message, bool isAuto = false)
        {
            if (p.joker)
            {
                message = "";
            }
            p.AutoAfk    = false;
            p.IsAfk      = !p.IsAfk;
            p.afkMessage = p.IsAfk ? message : null;
            TabList.Update(p, true);

            var oldLastAction = p.LastAction;

            p.LastAction = DateTime.UtcNow;

            bool cantSend = p.muted || (Server.chatmod && !p.voice);

            if (p.IsAfk)
            {
                if (cantSend)
                {
                    p.Message("You are now marked as being AFK.");
                }
                else
                {
                    if (message == null || message.Trim() == "")
                    {
                        ShowMessage(p, "-λNICK%S- is AFK");
                    }
                    else
                    {
                        if (isAuto)
                        {
                            ShowMessage(p, "-λNICK%S- is AFK " + message);
                        }
                        else
                        {
                            ShowMessage(p, "-λNICK%S- is AFK: " + message);
                        }
                    }
                    p.CheckForMessageSpam();
                }
                p.AFKCooldown = DateTime.UtcNow.AddSeconds(2);
                OnPlayerActionEvent.Call(p, PlayerAction.AFK, null, cantSend);
            }
            else
            {
                if (cantSend)
                {
                    p.Message("You are no longer marked as being AFK.");
                }
                else
                {
                    TimeSpan idleTime = DateTime.UtcNow - oldLastAction;
                    ShowMessage(p, string.Format("-λNICK%S- is no longer AFK ({0})", idleTime.Shorten()));
                    p.CheckForMessageSpam();
                }
                OnPlayerActionEvent.Call(p, PlayerAction.UnAFK, null, cantSend);
            }
        }
예제 #8
0
        public override void Use(Player p, string message, CommandData data)
        {
            if (p.Game.Referee)
            {
                Chat.MessageFrom(p, "λNICK %Sis no longer a referee");
                OnPlayerActionEvent.Call(p, PlayerAction.UnReferee);
                p.Game.Referee = false;
            }
            else
            {
                Chat.MessageFrom(p, "λNICK %Sis now a referee");
                OnPlayerActionEvent.Call(p, PlayerAction.Referee);
                p.Game.Referee = true;
            }
            p.SetPrefix();

            if (p.Supports(CpeExt.InstantMOTD))
            {
                p.SendMapMotd();
            }
            else if (p.Supports(CpeExt.HackControl))
            {
                string motd = p.GetMotd();
                if (p.Game.Referee)
                {
                    motd += " +hax";
                }
                p.Send(Hacks.MakeHackControl(p, motd));
            }
        }
예제 #9
0
 public override void Unload(bool shutdown)
 {
     OnPlayerConnectEvent.Unregister(HandleConnect);
     OnPlayerDisconnectEvent.Unregister(HandleDisconnect);
     OnPlayerChatEvent.Unregister(HandleChat);
     OnPlayerActionEvent.Unregister(HandlePlayerAction);
     OnModActionEvent.Unregister(HandleModerationAction);
 }
예제 #10
0
 public override void Load(bool startup)
 {
     OnPlayerConnectEvent.Register(HandleConnect, Priority.Low);
     OnPlayerDisconnectEvent.Register(HandleDisconnect, Priority.Low);
     OnPlayerChatEvent.Register(HandleChat, Priority.Low);
     OnPlayerActionEvent.Register(HandlePlayerAction, Priority.Low);
     OnModActionEvent.Register(HandleModerationAction, Priority.Low);
 }
예제 #11
0
        protected virtual void UnhookEventHandlers()
        {
            OnLevelUnloadEvent.Unregister(HandleLevelUnload);
            OnSendingHeartbeatEvent.Unregister(HandleSendingHeartbeat);
            OnSQLSaveEvent.Unregister(SaveStats);

            OnPlayerActionEvent.Unregister(HandlePlayerAction);
            OnPlayerDisconnectEvent.Unregister(HandlePlayerDisconnect);
        }
예제 #12
0
        protected virtual void HookEventHandlers()
        {
            OnLevelUnloadEvent.Register(HandleLevelUnload, Priority.High);
            OnSendingHeartbeatEvent.Register(HandleSendingHeartbeat, Priority.High);
            OnSQLSaveEvent.Register(SaveStats, Priority.High);

            OnPlayerActionEvent.Register(HandlePlayerAction, Priority.High);
            OnPlayerDisconnectEvent.Register(HandlePlayerDisconnect, Priority.High);
        }
예제 #13
0
 public static void InitHandlers()
 {
     OnPlayerConnectEvent.Register(OnConnect, Priority.High);
     OnPlayerDisconnectEvent.Register(OnLeave, Priority.High);
     OnPlayerMoveEvent.Register(OnMovement, Priority.High);
     OnPlayerClickEvent.Register(OnClick, Priority.High);
     OnPlayerChatEvent.Register(OnChat, Priority.High);
     OnTabListEntryAddedEvent.Register(HUD.GetTabName, Priority.High);
     OnPlayerActionEvent.Register(OnAFK, Priority.Normal);
 }
예제 #14
0
        public override void Use(Player p, string message)
        {
            if (message.Length == 0)
            {
                Help(p); return;
            }
            bool stealth = false;

            if (message[0] == '#')
            {
                message = message.Remove(0, 1).Trim();
                stealth = true;
                Logger.Log(LogType.UserActivity, "Stealth joker attempted");
            }

            Player who = PlayerInfo.FindMatches(p, message);

            if (who == null)
            {
                return;
            }
            if (p != null && who.Rank > p.Rank)
            {
                MessageTooHighRank(p, "joker", true); return;
            }

            if (!who.joker)
            {
                if (stealth)
                {
                    Chat.MessageOps(who.ColoredName + " %Sis now STEALTH jokered.");
                }
                else
                {
                    Chat.MessageGlobal(who, who.ColoredName + " %Sis now a &aJ&bo&ck&5e&9r%S.", false);
                }
                OnPlayerActionEvent.Call(p, PlayerAction.Joker, null, stealth);
            }
            else
            {
                if (stealth)
                {
                    Chat.MessageOps(who.ColoredName + " %Sis now STEALTH unjokered.");
                }
                else
                {
                    Chat.MessageGlobal(who, who.ColoredName + " %Sis no longer a &aJ&bo&ck&5e&9r%S.", false);
                }
                OnPlayerActionEvent.Call(p, PlayerAction.Unjoker, null, stealth);
            }
            who.joker = !who.joker;
        }
예제 #15
0
 public override void Unload(bool shutdown)
 {
     OnEntitySpawnedEvent.Unregister(HandleEntitySpawned);
     OnTabListEntryAddedEvent.Unregister(HandleTabListEntryAdded);
     OnMoneyChangedEvent.Unregister(HandleMoneyChanged);
     OnPlayerConnectEvent.Unregister(HandlePlayerConnect);
     OnPlayerDisconnectEvent.Unregister(HandlePlayerDisconnect);
     OnPlayerMoveEvent.Unregister(HandlePlayerMove);
     OnPlayerActionEvent.Unregister(HandlePlayerAction);
     OnPlayerSpawningEvent.Unregister(HandlePlayerSpawning);
     OnBlockChangeEvent.Unregister(HandleBlockChange);
     OnLevelUnloadEvent.Unregister(HandleLevelUnload);
 }
예제 #16
0
 public override void Load(bool startup)
 {
     OnEntitySpawnedEvent.Register(HandleEntitySpawned, Priority.High);
     OnTabListEntryAddedEvent.Register(HandleTabListEntryAdded, Priority.High);
     OnMoneyChangedEvent.Register(HandleMoneyChanged, Priority.High);
     OnPlayerConnectEvent.Register(HandlePlayerConnect, Priority.High);
     OnPlayerDisconnectEvent.Register(HandlePlayerDisconnect, Priority.High);
     OnPlayerMoveEvent.Register(HandlePlayerMove, Priority.High);
     OnPlayerActionEvent.Register(HandlePlayerAction, Priority.High);
     OnPlayerSpawningEvent.Register(HandlePlayerSpawning, Priority.High);
     OnBlockChangeEvent.Register(HandleBlockChange, Priority.High);
     OnLevelUnloadEvent.Register(HandleLevelUnload, Priority.High);
 }
예제 #17
0
        protected override void OnStop()
        {
            socket = null;
            if (api != null)
            {
                api.StopAsync();
                api = null;
            }
            base.OnStop();

            OnPlayerConnectEvent.Unregister(HandlePlayerConnect);
            OnPlayerDisconnectEvent.Unregister(HandlePlayerDisconnect);
            OnPlayerActionEvent.Unregister(HandlePlayerAction);
        }
예제 #18
0
 public override void Use(Player p, string message)
 {
     if (p.Game.Referee)
     {
         Chat.MessageGlobal(p, p.ColoredName + " %Sis no longer a referee", false);
         OnPlayerActionEvent.Call(p, PlayerAction.UnReferee);
         p.Game.Referee = false;
     }
     else
     {
         Chat.MessageGlobal(p, p.ColoredName + " %Sis now a referee", false);
         OnPlayerActionEvent.Call(p, PlayerAction.Referee);
         p.Game.Referee = true;
     }
 }
예제 #19
0
        public override void Use(Player p, string message, CommandData data)
        {
            if (message.Length == 0)
            {
                p.Message("You"); return;
            }
            if (p.joker)
            {
                p.Message("Cannot use /me while jokered."); return;
            }

            string msg = p.color + "*" + Colors.Strip(p.DisplayName) + " " + message;

            if (TryMessage(p, msg))
            {
                OnPlayerActionEvent.Call(p, PlayerAction.Me, message);
            }
        }
예제 #20
0
        internal static void ToggleAfk(Player p, string message)
        {
            if (p.joker)
            {
                message = "";
            }
            p.AutoAfk    = false;
            p.IsAfk      = !p.IsAfk;
            p.afkMessage = p.IsAfk ? message : null;
            TabList.Update(p, true);
            p.LastAction = DateTime.UtcNow;

            bool cantSend = p.muted || (Server.chatmod && !p.voice);

            if (p.IsAfk)
            {
                if (cantSend)
                {
                    Player.Message(p, "You are now marked as being AFK.");
                }
                else
                {
                    ShowMessage(p, "-" + p.ColoredName + "%S- is AFK " + message);
                    p.CheckForMessageSpam();
                }
                p.AFKCooldown = DateTime.UtcNow.AddSeconds(2);
                OnPlayerActionEvent.Call(p, PlayerAction.AFK, message);
            }
            else
            {
                if (cantSend)
                {
                    Player.Message(p, "You are no longer marked as being AFK.");
                }
                else
                {
                    ShowMessage(p, "-" + p.ColoredName + "%S- is no longer AFK");
                    p.CheckForMessageSpam();
                }
                OnPlayerActionEvent.Call(p, PlayerAction.UnAFK, message);
            }
        }
예제 #21
0
        internal static void ToggleAfk(Player p, string message)
        {
            if (p.joker)
            {
                message = "";
            }
            p.AutoAfk    = false;
            p.IsAfk      = !p.IsAfk;
            p.afkMessage = p.IsAfk ? message : null;
            TabList.Update(p, true);
            p.LastAction = DateTime.UtcNow;

            bool cantSend = !p.CanSpeak();

            if (p.IsAfk)
            {
                if (cantSend)
                {
                    p.Message("You are now marked as being AFK.");
                }
                else
                {
                    ShowMessage(p, "-λNICK%S- is AFK " + message);
                    p.CheckForMessageSpam();
                }
                p.AFKCooldown = DateTime.UtcNow.AddSeconds(2);
                OnPlayerActionEvent.Call(p, PlayerAction.AFK, null, cantSend);
            }
            else
            {
                if (cantSend)
                {
                    p.Message("You are no longer marked as being AFK.");
                }
                else
                {
                    ShowMessage(p, "-λNICK%S- is no longer AFK");
                    p.CheckForMessageSpam();
                }
                OnPlayerActionEvent.Call(p, PlayerAction.UnAFK, null, cantSend);
            }
        }
예제 #22
0
        void HandleEnter(Player p)
        {
            if (p == null)
            {
                Player.Message(p, "Console cannot enter the review queue."); return;
            }
            if (DateTime.UtcNow < p.NextReviewTime)
            {
                Player.Message(p, "You have to wait " + ServerConfig.ReviewCooldown + " seconds everytime you use this command");
                return;
            }

            foreach (string name in Server.reviewlist)
            {
                if (!name.CaselessEq(p.name))
                {
                    continue;
                }
                Player.Message(p, "You already entered the review queue!"); return;
            }

            bool opsOn = false;

            Player[]        players  = PlayerInfo.Online.Items;
            LevelPermission nextPerm = CommandExtraPerms.MinPerm(this.name, 2);

            foreach (Player pl in players)
            {
                if (pl.Rank >= nextPerm && Entities.CanSee(p, pl))
                {
                    opsOn = true; break;
                }
            }

            Server.reviewlist.Add(p.name);
            int pos = Server.reviewlist.IndexOf(p.name);

            if (pos > 1)
            {
                Player.Message(p, "You entered the &creview %Squeue. You have &c" + pos + " %Speople in front of you in the queue");
            }
            if (pos == 1)
            {
                Player.Message(p, "You entered the &creview %Squeue. There is &c1 %Sperson in front of you in the queue");
            }
            if (pos == 0)
            {
                Player.Message(p, "You entered the &creview %Squeue. You are &cfirst %Sin line!");
            }

            string msg = opsOn ?
                         "The Online staff have been notified. Someone should be with you shortly." :
                         "There are currently no staff online. Staff will be notified when they join the server.";

            Player.Message(p, msg);

            string start = pos > 0 ? "There are now &c" + (pos + 1) + " %Speople" : "There is now &c1 %Sperson";

            Chat.MessageWhere(p.ColoredName + " %Sentered the review queue", pl => pl.Rank >= nextPerm);
            Chat.MessageWhere(start + " waiting for a &creview!", pl => pl.Rank >= nextPerm);
            p.NextReviewTime = DateTime.UtcNow.AddSeconds(ServerConfig.ReviewCooldown);
            OnPlayerActionEvent.Call(p, PlayerAction.Review, null, true);
        }
예제 #23
0
        public override void Use(Player p, string message, CommandData data)
        {
            if (message.Length > 0 && p.possess.Length > 0)
            {
                p.Message("Stop your current possession first."); return;
            }
            bool silent = false;

            if (message.CaselessEq("silent"))
            {
                if (!CheckExtraPerm(p, data, 1))
                {
                    return;
                }
                silent = true;
            }

            Command adminchat = Command.Find("AdminChat");
            Command opchat    = Command.Find("OpChat");

            Entities.GlobalDespawn(p, false);

            p.hidden = !p.hidden;
            if (p.hidden)
            {
                p.hideRank = data.Rank;
                AnnounceOps(p, "To Ops -λNICK&S- is now &finvisible");

                if (!silent)
                {
                    string leaveMsg = "&c- λFULL &S" + PlayerDB.GetLogoutMessage(p);
                    Chat.MessageFrom(ChatScope.All, p, leaveMsg, null, null, true);
                }

                if (!p.opchat)
                {
                    opchat.Use(p, "", data);
                }
                Server.hidden.Add(p.name);
                OnPlayerActionEvent.Call(p, PlayerAction.Hide);
            }
            else
            {
                AnnounceOps(p, "To Ops -λNICK&S- is now &fvisible");
                p.hideRank = LevelPermission.Banned;

                if (!silent)
                {
                    string joinMsg = "&a+ λFULL &S" + PlayerDB.GetLoginMessage(p);
                    Chat.MessageFrom(ChatScope.All, p, joinMsg, null, null, true);
                }

                if (p.opchat)
                {
                    opchat.Use(p, "", data);
                }
                if (p.adminchat)
                {
                    adminchat.Use(p, "", data);
                }
                Server.hidden.Remove(p.name);
                OnPlayerActionEvent.Call(p, PlayerAction.Unhide);
            }

            Entities.GlobalSpawn(p, false);
            TabList.Add(p, p, Entities.SelfID);
            Server.hidden.Save(false);
        }