Example #1
0
 internal static void HandleChatMessage(DataBuffer buffer)
 {
     var type = (Enumerations.MessageType)buffer.ReadByte();
     var msg = buffer.ReadString();
     SFML.Graphics.Color color = new SFML.Graphics.Color(0, 0, 0);
     if (!Data.InGame) return;
     switch (type) {
         case Enumerations.MessageType.System:
             color = new SFML.Graphics.Color(100, 100, 49);
         break;
         case Enumerations.MessageType.Error:
             color = new SFML.Graphics.Color(255, 0, 0);
         break;
         case Enumerations.MessageType.World:
             color = new SFML.Graphics.Color(0, 195, 255);
         break;
         case Enumerations.MessageType.Map:
             color = new SFML.Graphics.Color(0, 0, 0);
         break;
         case Enumerations.MessageType.Emote:
             color = new SFML.Graphics.Color(255, 59, 0);
         break;
     }
     Interface.GUI.Get<TGUI.ChatBox>("chat").AddLine(msg, color);
 }
Example #2
0
        internal static void HandleMapList(DataBuffer buffer)
        {
            var max = buffer.ReadInt32();

            Program.FrmEditor.BeginInvoke((Action)(() => {
                Program.FrmEditor.ClearMaps();

            }));
            for (var i = 1; i <= max; i++) {
                    Program.FrmEditor.BeginInvoke((Action<Int32, String>)((num, name) => {
                        Program.FrmEditor.AddMap(String.Format("{0}: {1}", num, name));
                }), i, buffer.ReadString());
            }
        }
Example #3
0
        internal static void HandleCreateCharacterData(DataBuffer buffer)
        {
            // get amount of classes.
            var classes = buffer.ReadInt32();

            for (var i = 1; i < classes + 1; i++) {
                var c = new Class();
                c.Name = buffer.ReadString();
                c.MaleSprite = buffer.ReadInt32();
                c.FemaleSprite = buffer.ReadInt32();
                Data.Classes.Add(i, c);
            }

            Interface.ChangeUI(Interface.Windows.CharacterCreate);
        }
Example #4
0
        public static void HandleLogin(Int32 id, DataBuffer buffer)
        {
            // Handles a user's request to login.
            var username = buffer.ReadString().Trim();
            var password = buffer.ReadString().Trim();

            // Check if the user isn't sending too long/short data.
            if (username.Trim().Length < Data.Settings.MinUsernameChar || username.Trim().Length > Data.Settings.MaxUsernameChar || password.Trim().Length < Data.Settings.MinPasswordChar || password.Trim().Length > Data.Settings.MaxPasswordChar) {
                Send.AlertMessage(id, String.Format("Your username must be between {0} and {1} characters long. Your password must be between {2} and {3} characters long.", Data.Settings.MinUsernameChar, Data.Settings.MaxUsernameChar, Data.Settings.MinPasswordChar, Data.Settings.MaxPasswordChar));
                return;
            }

            // Check if this account exists.
            if (!File.Exists(String.Format("{0}data files\\accounts\\{1}.xml", Data.AppPath, username.ToLower()))) {
                Send.AlertMessage(id, "Invalid Username/Password!");
                return;
            }

            // Load our player!
            Data.LoadPlayer(id, username.ToLower());

            // Compare their passwords!
            if (!Data.Players[id].ComparePassword(password)) {
                Send.AlertMessage(id, "Invalid Username/Password!");
                Data.Players[id] = new Extensions.Database.Player();
                return;
            }

            // Send our OK.
            Logger.Write(String.Format("ID: {0} has logged in as {1}", id, Data.Players[id].Username));
            Send.LoginOK(id);

            // Disconnect anyone else logged into this account.
            var oldclient = 0;
            for (var i = 0; i < Data.Players.Count; i++) {
                var key = Data.Players.ElementAt(i).Key;
                    if (Data.Players[key].Username.ToLower().Equals(username.ToLower()) && key != id) {
                        oldclient = key;
                    }
            }
            if (oldclient != 0) {
                Send.AlertMessage(oldclient, "Someone else has logged onto your account!");
                Logger.Write(String.Format("ID: {0} conflicts with a login at ID: {1}, Disconnecting ID: {1}", id, oldclient));
                Data.SavePlayer(oldclient);
                // NOTE: the user is still logged on until they get this message, we're saving their data on purpose.
                // Their data will now be saved twice, but we can safely load it.
                Data.LoadPlayer(id, username.ToLower());
                // Now remove the old player from the world by force.
                Program.Server.DisconnectClient(oldclient);
            }

            // Check if they have at least one character.
            var haschars = false;
            foreach(var chr in Data.Players[id].Characters) {
                if (chr.Name.Length > 0) haschars = true;
            }

            // If we have characters, show character select.
            // Otherwise force the user to make a new character.
            if (haschars) {
                Send.SelectCharacterData(id);
            } else {
                Send.NewCharacterData(id);
            }
        }
Example #5
0
        internal static void HandleChatMessage(Int32 id, DataBuffer buffer)
        {
            var msg = buffer.ReadString();
            if (msg[0] == '/') {
                var data = msg.ToLower().Split(' ');
                switch (data[0]) {

                    case "/editmap":
                        if (Data.Players[id].UserRank >= (Byte)Enumerations.Ranks.Developer) {
                            Send.MapEditorData(id);
                        }
                    break;
                    case "/w":
                        Send.ChatMessageWorld(id, msg.Substring(2), Enumerations.MessageType.World);
                    break;
                    case "/me":
                    case "/em":
                        Send.ChatMessageMap(id, Data.Players[id].Characters[Data.TempPlayers[id].CurrentCharacter].Map, msg.Substring(3), Enumerations.MessageType.Emote);
                    break;
                    default:
                        Send.ChatMessage(id, id, "Unknown command.", Enumerations.MessageType.Error);
                    break;

                }
            } else {
                Send.ChatMessageMap(id, Data.Players[id].Characters[Data.TempPlayers[id].CurrentCharacter].Map, msg, Enumerations.MessageType.Map);
            }
        }
Example #6
0
        public static void HandleAddCharacter(Int32 id, DataBuffer buffer)
        {
            var legal   = new Regex("^[a-zA-Z0-9]*$");
            var name    = buffer.ReadString().Trim();
            var classn  = buffer.ReadInt32();
            var gender = buffer.ReadByte();

            // Make sure this player exists.
            if (!Data.Players.ContainsKey(id)) return;

            // Make sure the name is at least X characters long.
            if (name.Length < Data.Settings.MinUsernameChar) {
                Send.AlertMessage(id, String.Format("Character name must be at least {0} characters in length.", Data.Settings.MinUsernameChar));
                return;
            }

            // Make sure they only entered regular characters.
            if (!legal.IsMatch(name)) {
                Send.AlertMessage(id, "Invalid name, only letters and numbers are allowed in names.");
                return;
            }

            // Check if the name is already in use or not.
            if (Data.Characters.Contains(name)) {
                Send.AlertMessage(id, "A character with this name already exists!");
                return;
            }

            // Check if there's a slot left to use!
            var slot = -1;
            for (var i = 0; slot < Data.Players[id].Characters.Length; i++) {
                if (Data.Players[id].Characters[i].Name.Length < 1) {
                    slot = i;
                    break;
                }
            }
            if (slot < 0) {
                Send.AlertMessage(id, "Unable to create character.");
                return;
            }

            // We've come this far, we can add this character!
            Data.Characters.Add(name);
            Data.Players[id].Characters[slot].Name                                    = name;
            Data.Players[id].Characters[slot].Gender                                  = (Byte)gender;
            Data.Players[id].Characters[slot].Class                                   = classn;
            Data.Players[id].Characters[slot].Sprite                                  = gender == (Int32)Enumerations.Gender.Male ? Data.Classes[classn].MaleSprite : Data.Classes[classn].FemaleSprite;
            Data.Players[id].Characters[slot].Level                                   = 1;
            Data.Players[id].Characters[slot].Map                                     = Data.Settings.StartMap;
            Data.Players[id].Characters[slot].X                                       = Data.Settings.StartX;
            Data.Players[id].Characters[slot].Y                                       = Data.Settings.StartY;
            Data.Players[id].Characters[slot].Direction                               = (Int32)Enumerations.Direction.Down;
            for (var i = 0; i < (Int32)Enumerations.Stats.Stat_Count; i++) {
                Data.Players[id].Characters[slot].Statistic[i] = Data.Classes[classn].Statistic[i];
            }

            // Save our data!
            Data.SaveCharacterList();
            Data.SavePlayer(id);

            // Notify our user!
            Logger.Write(String.Format("ID: {0} has created a character named '{1}'.", id, name));
            HandleData.HandleUseCharacter(id, slot);
        }
Example #7
0
        public static void HandleNewAccount(Int32 id, DataBuffer buffer)
        {
            // Handles a user's request to register an account.
            var username = buffer.ReadString().Trim();
            var password = buffer.ReadString().Trim();
            var legal = new Regex("^[a-zA-Z0-9]*$");

            // Check if the user isn't sending too long/short data.
            if (username.Trim().Length < Data.Settings.MinUsernameChar || username.Trim().Length > Data.Settings.MaxUsernameChar || password.Trim().Length < Data.Settings.MinPasswordChar || password.Trim().Length > Data.Settings.MaxPasswordChar) {
                Send.AlertMessage(id, String.Format("Your username must be between {0} and {1} characters long. Your password must be between {2} and {3} characters long.", Data.Settings.MinUsernameChar, Data.Settings.MaxUsernameChar, Data.Settings.MinPasswordChar, Data.Settings.MaxPasswordChar));
                return;
            }

            // Check if the user isn't sending any unallowed characters.
            if (!legal.IsMatch(username)) {
                Send.AlertMessage(id, "Invalid username, only letters and numbers are allowed in names.");
                return;
            }

            // Check if this account already exists.
            if (File.Exists(String.Format("{0}data files\\accounts\\{1}.xml", Data.AppPath, username.ToLower()))) {
                Send.AlertMessage(id, "Sorry, that account name is already taken!");
                return;
            }

            // Now we can finaly start creating the account!
            Data.Players[id].Username = username;
            Data.Players[id].SetPassword(password);     // Always use this over setting the password directly! This hashes and salts it.

            // Save the player!
            Data.SavePlayer(id);
            Logger.Write(String.Format("ID: {0} has created a new account named '{1}'.", id, username));

            // Send them our OK!
            Send.LoginOK(id);

            // Send our player the data required to create a new character!
            Send.NewCharacterData(id);
        }
Example #8
0
 internal static void HandleErrorMessage(DataBuffer buffer)
 {
     var message = buffer.ReadString();
     Interface.ShowAlertbox("Error", message);
     Program.NetworkClient.Close();
 }
Example #9
0
        internal static void HandleSelectCharacterData(DataBuffer buffer)
        {
            // Retrieve our data.
            for (var i = 0; i < Data.CharSelect.Length; i++) {
                Data.CharSelect[i] = new Character();
                Data.CharSelect[i].Name  = buffer.ReadString();
                Data.CharSelect[i].Level = buffer.ReadInt32();
            }

            // Move to the select screen.
            Interface.ChangeUI(Interface.Windows.CharacterSelect);
        }
Example #10
0
 internal static void HandleAlertMessage(DataBuffer buffer)
 {
     var message = buffer.ReadString();
     Interface.ShowMessagebox("Error", message);
 }
Example #11
0
        internal static void HandlePlayerData(DataBuffer buffer)
        {
            var id = buffer.ReadInt32();
            if (!Data.Players.ContainsKey(id)) {
                Data.Players.Add(id, new Character());
                Data.TempPlayers.Add(id, new TempPlayer());
            }

            Data.Players[id].Name = buffer.ReadString();
            Data.Players[id].Gender = buffer.ReadByte();
            Data.Players[id].Class = buffer.ReadInt32();
            Data.Players[id].Level = buffer.ReadInt32();
            Data.Players[id].Experience = buffer.ReadInt32();
            Data.Players[id].Sprite = buffer.ReadInt32();
            Data.Players[id].Map = buffer.ReadInt32();
            Data.Players[id].X = buffer.ReadInt32();
            Data.Players[id].Y = buffer.ReadInt32();
            Data.Players[id].Direction = buffer.ReadByte();
            for (var i = 0; i < (Int32)Enumerations.Stats.Stat_Count - 1; i++) {
                Data.Players[id].Statistic[i] = buffer.ReadInt32();
            }
        }