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(); }
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; } }