示例#1
0
        public override void Load(bool startup)
        {
            command = new CmdCustomModel();
            Command.Register(command);

            OnPlayerConnectEvent.Register(OnPlayerConnect, Priority.Low);
            OnPlayerDisconnectEvent.Register(OnPlayerDisconnect, Priority.Low);
            OnJoiningLevelEvent.Register(OnJoiningLevel, Priority.Low);
            OnJoinedLevelEvent.Register(OnJoinedLevel, Priority.Low);
            OnSendingModelEvent.Register(OnSendingModel, Priority.Low);
            OnPlayerCommandEvent.Register(OnPlayerCommand, Priority.Low);
            // OnEntitySpawnedEvent.Register(OnEntitySpawned, Priority.Low);

            Directory.CreateDirectory(PublicModelsDirectory);
            Directory.CreateDirectory(PersonalModelsDirectory);

            int numModels         = CreateMissingCCModels(false);
            int numPersonalModels = CreateMissingCCModels(true);

            Logger.Log(
                LogType.SystemActivity,
                "CustomModels Loaded with {0} Models and {1} Personal Models",
                numModels,
                numPersonalModels
                );

            // initialize because of a late plugin load
            foreach (Player p in PlayerInfo.Online.Items)
            {
                SentCustomModels.TryAdd(p.name, new HashSet <string>(StringComparer.OrdinalIgnoreCase));
                ModelNameToIdForPlayer.TryAdd(p.name, new ConcurrentDictionary <string, byte>(StringComparer.OrdinalIgnoreCase));
            }
        }
示例#2
0
        public override void Unload(bool shutdown)
        {
            SentCustomModels.Clear();
            ModelNameToIdForPlayer.Clear();

            OnPlayerConnectEvent.Unregister(OnPlayerConnect);
            OnPlayerDisconnectEvent.Unregister(OnPlayerDisconnect);
            OnJoiningLevelEvent.Unregister(OnJoiningLevel);
            OnJoinedLevelEvent.Unregister(OnJoinedLevel);
            OnSendingModelEvent.Unregister(OnSendingModel);
            OnPlayerCommandEvent.Unregister(OnPlayerCommand);
            // OnEntitySpawnedEvent.Unregister(OnEntitySpawned);

            if (command != null)
            {
                Command.Unregister(command);
                command = null;
            }
        }
示例#3
0
        public override void Unload(bool shutdown)
        {
            if (dc != null)
            {
                dc.Dispose();
            }
            if (!registered)
            {
                return;
            }
            OnPlayerConnectEvent.Unregister(PlayerConnect);
            OnPlayerDisconnectEvent.Unregister(PlayerDisconnect);
            OnPlayerChatEvent.Unregister(PlayerChat);
            OnPlayerCommandEvent.Unregister(PlayerCommand);

            OnMessageReceivedEvent.Unregister(DiscordMessage);

            Command.Unregister(Command.Find("DiscordBot"));
        }
示例#4
0
        public override void Load(bool startup)
        {
            config.LoadConfig();
            if (config.Token == "" || config.ChannelID == "")
            {
                Logger.Log(LogType.Warning, "Invalid config! Please setup the Discord bot in discord.properties! (plugin reload required)");
                return;
            }

            dc = new Discord.Discord(config.Token, config.ChannelID);

            OnPlayerConnectEvent.Register(PlayerConnect, Priority.Low);
            OnPlayerDisconnectEvent.Register(PlayerDisconnect, Priority.Low);
            OnPlayerChatEvent.Register(PlayerChat, Priority.Low);
            OnPlayerCommandEvent.Register(PlayerCommand, Priority.Low);
            OnModActionEvent.Register(ModAction, Priority.Low);

            OnMessageReceivedEvent.Register(DiscordMessage, Priority.Low);

            Command.Register(new CmdDiscordBot());
            registered = true;
        }
示例#5
0
        void CompleteLoginProcess()
        {
            LevelPermission adminChatRank = CommandOtherPerms.FindPerm("adminchat", LevelPermission.Admin);

            SendUserMOTD();
            SendMap(null);
            if (disconnected)
            {
                return;
            }
            loggedIn = true;

            PlayerInfo.Online.Add(this);
            connections.Remove(this);
            RemoveFromPending();
            Server.s.PlayerListUpdate();

            //OpenClassic Client Check
            SendBlockchange(0, 0, 0, 0);
            timeLogged = DateTime.Now;
            lastLogin  = DateTime.Now;
            time       = new TimeSpan(0, 0, 0, 1);
            DataTable playerDb = Database.Backend.GetRows("Players", "*", "WHERE Name=@0", name);

            if (playerDb.Rows.Count == 0)
            {
                InitPlayerStats(playerDb);
            }
            else
            {
                LoadPlayerStats(playerDb);
            }

            Server.Background.QueueOnce(ShowAltsTask, name, TimeSpan.Zero);
            CheckState();
            ZombieStats stats = Server.zombie.LoadZombieStats(name);

            Game.MaxInfected       = stats.MaxInfected; Game.TotalInfected = stats.TotalInfected;
            Game.MaxRoundsSurvived = stats.MaxRounds; Game.TotalRoundsSurvived = stats.TotalRounds;

            if (!Directory.Exists("players"))
            {
                Directory.CreateDirectory("players");
            }
            PlayerDB.Load(this);
            Game.Team = Team.FindTeam(this);
            SetPrefix();
            playerDb.Dispose();
            LoadCpeData();

            if (Server.verifyadmins && group.Permission >= Server.verifyadminsrank)
            {
                adminpen = true;
            }
            if (Server.noEmotes.Contains(name))
            {
                parseEmotes = !Server.parseSmiley;
            }

            hidden = group.CanExecute("hide") && Server.hidden.Contains(name);
            if (hidden)
            {
                SendMessage("&8Reminder: You are still hidden.");
            }
            if (group.Permission >= adminChatRank && Server.adminsjoinsilent)
            {
                hidden = true; adminchat = true;
            }

            if (PlayerConnect != null)
            {
                PlayerConnect(this);
            }
            OnPlayerConnectEvent.Call(this);
            if (cancellogin)
            {
                cancellogin = false; return;
            }


            string joinm = "&a+ " + FullName + " %S" + PlayerDB.GetLoginMessage(this);

            if (hidden)
            {
                joinm = "&8(hidden)" + joinm;
            }
            const LevelPermission perm = LevelPermission.Guest;

            if (group.Permission > perm || (Server.guestJoinNotify && group.Permission <= perm))
            {
                Player[] players = PlayerInfo.Online.Items;
                foreach (Player pl in players)
                {
                    if (Entities.CanSee(pl, this))
                    {
                        Player.Message(pl, joinm);
                    }
                }
            }

            if (Server.agreetorulesonentry && group.Permission == LevelPermission.Guest && !Server.agreed.Contains(name))
            {
                SendMessage("&9You must read the &c/rules&9 and &c/agree&9 to them before you can build and use commands!");
                agreed = false;
            }

            if (Server.verifyadmins && group.Permission >= Server.verifyadminsrank)
            {
                if (!Directory.Exists("extra/passwords") || !File.Exists("extra/passwords/" + name + ".dat"))
                {
                    SendMessage("&cPlease set your admin verification password with &a/setpass [Password]!");
                }
                else
                {
                    SendMessage("&cPlease complete admin verification with &a/pass [Password]!");
                }
            }

            Server.s.Log(name + " [" + ip + "] has joined the server.");
            Game.InfectMessages = PlayerDB.GetInfectMessages(this);
            Server.zombie.PlayerJoinedServer(this);

            ushort x = (ushort)(level.spawnx * 32 + 16);
            ushort y = (ushort)(level.spawny * 32 + 32);
            ushort z = (ushort)(level.spawnz * 32 + 16);

            pos = new ushort[3] {
                x, y, z
            };
            rot = new byte[2] {
                level.rotx, level.roty
            };

            Entities.SpawnEntities(this, x, y, z, rot[0], rot[1]);
            PlayerActions.CheckGamesJoin(this, null);
            Loading = false;
        }
示例#6
0
        void CompleteLoginProcess()
        {
            // Lock to ensure that no two players can end up with the same playerid
            lock (PlayerInfo.Online.locker) {
                id = NextFreeId();
                PlayerInfo.Online.Add(this);
            }

            SendMap(null);
            if (disconnected)
            {
                return;
            }
            loggedIn = true;
            connections.Remove(this);
            RemoveFromPending();
            Server.PlayerListUpdate();

            SessionStartTime = DateTime.UtcNow;
            LastLogin        = DateTime.Now;
            TotalTime        = TimeSpan.FromSeconds(1);
            GetPlayerStats();
            ShowWelcome();

            Server.Background.QueueOnce(ShowAltsTask, name, TimeSpan.Zero);
            CheckState();
            ZombieStats stats = Server.zombie.LoadZombieStats(name);

            Game.MaxInfected       = stats.MaxInfected; Game.TotalInfected = stats.TotalInfected;
            Game.MaxRoundsSurvived = stats.MaxRounds; Game.TotalRoundsSurvived = stats.TotalRounds;

            if (!Directory.Exists("players"))
            {
                Directory.CreateDirectory("players");
            }
            PlayerDB.Load(this);
            Game.Team = Team.TeamIn(this);
            SetPrefix();
            LoadCpeData();

            if (ServerConfig.verifyadmins && group.Permission >= ServerConfig.VerifyAdminsRank)
            {
                adminpen = true;
            }
            if (Server.noEmotes.Contains(name))
            {
                parseEmotes = !ServerConfig.ParseEmotes;
            }

            LevelPermission adminChatRank = CommandExtraPerms.MinPerm("adminchat", LevelPermission.Admin);

            hidden = group.CanExecute("hide") && Server.hidden.Contains(name);
            if (hidden)
            {
                SendMessage("&8Reminder: You are still hidden.");
            }
            if (group.Permission >= adminChatRank && ServerConfig.AdminsJoinSilently)
            {
                hidden = true; adminchat = true;
            }

            OnPlayerConnectEvent.Call(this);
            if (cancellogin)
            {
                cancellogin = false; return;
            }

            string joinm = "&a+ " + FullName + " %S" + PlayerDB.GetLoginMessage(this);

            if (hidden)
            {
                joinm = "&8(hidden)" + joinm;
            }

            const LevelPermission perm = LevelPermission.Guest;

            if (group.Permission > perm || (ServerConfig.GuestJoinsNotify && group.Permission <= perm))
            {
                Chat.MessageGlobal(this, joinm, false, true);
            }

            if (ServerConfig.AgreeToRulesOnEntry && group.Permission == LevelPermission.Guest && !Server.agreed.Contains(name))
            {
                SendMessage("&9You must read the &c/Rules&9 and &c/Agree&9 to them before you can build and use commands!");
                agreed = false;
            }

            if (ServerConfig.verifyadmins && group.Permission >= ServerConfig.VerifyAdminsRank)
            {
                if (!Directory.Exists("extra/passwords") || !File.Exists("extra/passwords/" + name + ".dat"))
                {
                    SendMessage("&cPlease set your admin verification password with %T/SetPass [Password]!");
                }
                else
                {
                    SendMessage("&cPlease complete admin verification with %T/Pass [Password]!");
                }
            }

            try {
                if (group.CanExecute("inbox") && Database.TableExists("Inbox" + name))
                {
                    using (DataTable table = Database.Backend.GetRows("Inbox" + name, "*")) {
                        if (table.Rows.Count > 0)
                        {
                            SendMessage("You have &a" + table.Rows.Count + " %Smessages in %T/Inbox");
                        }
                    }
                }
            } catch {
            }

            if (ServerConfig.PositionUpdateInterval > 1000)
            {
                SendMessage("Lowlag mode is currently &aON.");
            }

            if (String.IsNullOrEmpty(appName))
            {
                Logger.Log(LogType.UserActivity, "{0} [{1}] connected.", name, ip);
            }
            else
            {
                Logger.Log(LogType.UserActivity, "{0} [{1}] connected using {2}.", name, ip, appName);
            }
            Game.InfectMessages = PlayerDB.GetInfectMessages(this);
            Server.lava.PlayerJoinedServer(this);

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

            OnPlayerSpawningEvent.Call(this, ref pos, ref yaw, ref pitch, false);
            Pos = pos;
            SetYawPitch(yaw, pitch);

            Entities.SpawnEntities(this, true);
            PlayerActions.CheckGamesJoin(this, null);
            Loading = false;
        }
示例#7
0
        void CompleteLoginProcess()
        {
            Player clone = null;

            OnPlayerFinishConnectingEvent.Call(this);
            if (cancelconnecting)
            {
                cancelconnecting = false; return;
            }

            lock (PlayerInfo.Online.locker) {
                // Check if any players online have same name
                Player[] players = PlayerInfo.Online.Items;
                foreach (Player pl in players)
                {
                    if (pl.truename == truename)
                    {
                        clone = pl; break;
                    }
                }

                // Remove clone from list (hold lock for as short time as possible)
                if (clone != null && Server.Config.VerifyNames)
                {
                    PlayerInfo.Online.Remove(clone);
                }
                id = NextFreeId();
                PlayerInfo.Online.Add(this);
            }

            if (clone != null && Server.Config.VerifyNames)
            {
                string reason = ip == clone.ip ? "(Reconnecting)" : "(Reconnecting from a different IP)";
                clone.Leave(reason);
            }
            else if (clone != null)
            {
                Leave(null, "Already logged in!", true); return;
            }

            SendRawMap(null, level);
            if (Socket.Disconnected)
            {
                return;
            }
            loggedIn = true;

            SessionStartTime = DateTime.UtcNow;
            LastLogin        = DateTime.Now;
            TotalTime        = TimeSpan.FromSeconds(1);
            GetPlayerStats();
            ShowWelcome();

            Server.Background.QueueOnce(ShowAltsTask, name, TimeSpan.Zero);
            CheckState();

            PlayerDB.LoadNick(this);
            Game.Team = Team.TeamIn(this);
            SetPrefix();
            LoadCpeData();

            if (Server.noEmotes.Contains(name))
            {
                parseEmotes = !Server.Config.ParseEmotes;
            }

            hideRank = Rank;
            hidden   = CanUse("Hide") && Server.hidden.Contains(name);
            if (hidden)
            {
                Message("&8Reminder: You are still hidden.");
            }

            if (Chat.AdminchatPerms.UsableBy(Rank) && Server.Config.AdminsJoinSilently)
            {
                hidden = true; adminchat = true;
            }

            OnPlayerConnectEvent.Call(this);
            if (cancellogin)
            {
                cancellogin = false; return;
            }

            string joinMsg = "&a+ λFULL &S" + PlayerDB.GetLoginMessage(this);

            if (hidden)
            {
                joinMsg = "&8(hidden)" + joinMsg;
            }

            if (Server.Config.GuestJoinsNotify || Rank > LevelPermission.Guest)
            {
                Chat.MessageFrom(ChatScope.All, this, joinMsg, null, Chat.FilterVisible(this), !hidden);
            }

            if (Server.Config.AgreeToRulesOnEntry && Rank == LevelPermission.Guest && !Server.agreed.Contains(name))
            {
                Message("&9You must read the &c/Rules &9and &c/Agree &9to them before you can build and use commands!");
                agreed = false;
            }

            CheckIsUnverified();

            if (CanUse("Inbox") && Database.TableExists("Inbox" + name))
            {
                int count = Database.CountRows("Inbox" + name);
                if (count > 0)
                {
                    Message("You have &a" + count + " &Smessages in &T/Inbox");
                }
            }

            if (Server.Config.PositionUpdateInterval > 1000)
            {
                Message("Lowlag mode is currently &aON.");
            }

            if (String.IsNullOrEmpty(appName))
            {
                Logger.Log(LogType.UserActivity, "{0} [{1}] connected.", truename, IP);
            }
            else
            {
                Logger.Log(LogType.UserActivity, "{0} [{1}] connected using {2}.", truename, IP, appName);
            }

            PlayerActions.PostSentMap(this, null, level, false);
            Loading = false;
        }
示例#8
0
 public override void Unload(bool shutdown)
 {
     OnPlayerConnectEvent.Unregister(DoKickJini);
 }
示例#9
0
 public override void Load(bool startup)
 {
     OnPlayerConnectEvent.Register(DoKickJini, Priority.High);
 }
示例#10
0
 public override void Load(bool startup)
 {
     OnPlayerConnectEvent.Register(DisableNagle, Priority.High);
 }
示例#11
0
 public override void Unload(bool shutdown)
 {
     OnPlayerConnectEvent.Unregister(HandlePlayerConnect);
 }
示例#12
0
 public override void Load(bool startup)
 {
     whitelist = PlayerList.Load("extra/vpnwhitelist.txt");
     OnPlayerConnectEvent.Register(HandlePlayerConnect, Priority.Low);
 }
示例#13
0
 public override void Unload(bool shutdown)
 {
     OnPlayerConnectEvent.Unregister(DisableNagle);
 }