Exemplo n.º 1
0
 public MudInterpreter(MudServer server, MudConnection con, Dungeon dungeon)
 {
     Server       = server;
     this.dungeon = dungeon;
     Connection   = con;
     status       = InterpreterState.NeworContinue;
     con.SendString("Create a new character or continue (N/C): ");
     Commands.Add("help", new Action <string>(HelpCommand));
     Commands.Add("status", new Action <string>(StatusCommand));
     Commands.Add("inventory", new Action <string>(InventoryCommand));
     Commands.Add("examine", new Action <string>(ExamineCommand));
     salt = GenerateSalt();
 }
Exemplo n.º 2
0
        void Initialize(string input)
        {
            PlayerCharacterFactory f = new PlayerCharacterFactory();

            if (input.Length == 0)
            {
                return;
            }
            switch (status)
            {
            case InterpreterState.NeworContinue:
                if (input.ToLower()[0] != 'n' && input.ToLower()[0] != 'c')
                {
                    Connection.SendString("Create a new character or continue (N/C): ");
                    return;
                }
                Continue = false;

                if (input.ToLower()[0] == 'c')
                {
                    Continue = true;
                }

                Connection.SendString("username: "******"user already exists\nusername: "******"\n");
                    Connection.SendString("username: "******"password: "******"Choose a class:\r\n");
                        foreach (string s in f.GetAvailableClasses())
                        {
                            Connection.SendString(s + "\r\n");
                        }
                        status = InterpreterState.WaitingForClass;
                    }
                }

                break;

            case InterpreterState.WaitingForClass:
                input = input.ToLower().Trim();
                bool classExists = false;
                foreach (string s in f.GetAvailableClasses())
                {
                    if (s == input)
                    {
                        classExists = true;
                        break;
                    }
                }
                if (!classExists)
                {
                    Connection.SendString("No such class");
                    Connection.SendString("Choose a class:\r\n");
                    foreach (string s in f.GetAvailableClasses())
                    {
                        Connection.SendString(s + "\r\n");
                    }
                }
                else
                {
                    userClass = input;
                    status    = InterpreterState.WaitingForPassword;
                    Connection.SendString("Password: "******"re-enter password: "******"passwords do not match\npassword: "******"{0} ({1})", pass, pass.Length);
                    Player = f.GetInstanceByClass(userClass, user, 1, 0);
                    database.StorePlayer(Player);
                    database.StoreUserandPass(user, salt, pass);
                }
                if (Continue)
                {
                    string storedpass = database.GetPlayerPassword(user);
                    if (storedpass != pass)
                    {
                        Connection.SendString("bad username or password\nCreate a new character or continue (N/C): ");
                        status = InterpreterState.NeworContinue;
                        user   = null;
                        pass   = null;
                        return;
                    }
                    if (AlreadyOnline(user))
                    {
                        Connection.SendString("Player already logged in\r\n");
                        Connection.ConnectionSocket.Close();
                        return;
                    }
                    Player = database.GetPlayer(user);

                    status = InterpreterState.Standard;
                }

                Player.OnNotifyPlayer += (c, s) => Connection.SendString(s + "\r\n");
                Player.OnNewRoomates  += new Action <PlayerCharacter>(NewRoomates);
                dungeon.AddCharacter(Player, dungeon.StartingRoom);
                Logger.Log(string.Format("{0} {1} : {2}", DateTime.Now, user, Connection.ConnectionSocket.RemoteEndPoint.ToString()));
                status                   = InterpreterState.Standard;
                Player.ItemEquiped      += (c, i) => { database.StorePlayer(Player); };
                Player.ExperienceGained += (c, e) => { database.StorePlayer(Player); };
                Player.InventoryChange  += (c, i) => { database.ChangeItemCount(Player.Name, i.Name, Player.GetItemCount(i.Name)); };
                status                   = InterpreterState.Standard;
                break;
            }
        }