public User.User.UserState InsertResponse(string response, string userId) { User.User.UserState state = User.User.UserState.LOGGING_IN; UserScript specificUser = usersLoggingIn.Where(u => u.user.UserID == userId).SingleOrDefault(); if (specificUser != null && specificUser.currentStep == Steps.AWAITINGRESPONSE) { switch (specificUser.lastStep) { case Steps.NAME: if (ValidatePlayerName(specificUser.user.UserID, response)) { userId = specificUser.user.UserID; specificUser.user.LogID = specificUser.user.UserID; usersLoggingIn.Where(u => u.user.UserID == userId).SingleOrDefault().currentStep = Steps.PASSWORD; usersLoggingIn.Where(u => u.user.UserID == userId).SingleOrDefault().lastStep = Steps.AWAITINGRESPONSE; } else { usersLoggingIn.Where(u => u.user.UserID == userId).SingleOrDefault().currentStep = Steps.NAME; usersLoggingIn.Where(u => u.user.UserID == userId).SingleOrDefault().lastStep = Steps.NAME; } break; case Steps.PASSWORD: if (ValidatePlayerPassword(specificUser.user.UserID, response)) { specificUser.currentStep = Steps.SUCCEEDED; specificUser.lastStep = Steps.PASSWORD; } else { usersLoggingIn.Where(u => u.user.UserID == userId).SingleOrDefault().currentStep = Steps.PASSWORD; usersLoggingIn.Where(u => u.user.UserID == userId).SingleOrDefault().lastStep = Steps.PASSWORD; } break; case Steps.CREATECHAR: if (String.Compare(response[0].ToString(), "y", true) == 0) { state = User.User.UserState.CREATING_CHARACTER; usersLoggingIn.Remove(specificUser); } else { specificUser.currentStep = Steps.NAME; specificUser.lastStep = Steps.NONE; } break; default: //something has gone terribly wrong if we get here break; } } return(state); }
//this method will only send the message to users in a certain state (logging in, creating character, playing, etc.) //this will come in handy for the login and character creation portions private void SendToClients(User.User.UserState state, byte[] message) { List <Socket> matchesState = clientSocketList.Where(s => s.Value.CurrentState == state).Select(s => s.Key).ToList(); foreach (Socket client in matchesState) { client.Send(message); logger.Log(client.RemoteEndPoint.ToString() + " >>> " + System.Text.Encoding.ASCII.GetString(message)); } this.ServerSocket.BeginAccept(new AsyncCallback(AcceptCallback), null); }
public User.User.UserState ExecuteResponse(string response, string userId) { User.User.UserState state = User.User.UserState.LOGGING_IN; ScriptUsers specificUser = _userList.Where(u => u.user.UserID == userId).SingleOrDefault(); if (specificUser != null && specificUser.currentStep != "NONE") { //a switch won't work here, what needs ot happen is we go to the DB and get the logic for this current step //that will do something based on th euser input } return(state); }
public User.User.UserState InsertResponse(string response, string userId) { User.User.UserState state = User.User.UserState.LEVEL_UP; if (string.IsNullOrEmpty(response)) { return(state); } TempLvlChar currentUser = usersLevelingUp.Where(u => u.user.UserID == userId).SingleOrDefault(); currentUser.Response = response; BsonDocument stepDoc = MongoUtils.MongoData.GetCollection("Scripts", "LevelUp").FindOneAs <BsonDocument>(Query.EQ("_id", currentUser.lastStep.ToString())); if (currentUser != null && currentUser.currentStep == ScriptSteps.AwaitingResponse) { state = (User.User.UserState)ParseStepDocument(stepDoc, currentUser, levelUpScript); } currentUser.Response = ""; return(state); }
private User.User.UserState IncreaseStatResponse(string response, TempLvlChar currentUser) { User.User.UserState state = User.User.UserState.LEVEL_UP; int stat = -1; decimal increase = 0m; int.TryParse(response, out stat); if (stat >= 1 && stat <= currentUser.maxOptions + 1) { string attribute = ""; Dictionary <string, Character.Attribute> attributesPlayerHas = currentUser.user.Player.GetAttributes(); int i = 1; foreach (KeyValuePair <string, Character.Attribute> index in attributesPlayerHas) { if (i == stat) { attribute = index.Key; break; } i++; } if (!string.IsNullOrEmpty(attribute)) { increase = RankIncrease(currentUser, attribute); } else { //player chose to quit while still having points to spend state = User.User.UserState.TALKING; usersLevelingUp.Remove(currentUser); return(state); } if (increase > 0) { currentUser.user.MessageHandler(String.Format("You've increased your {0} by {1} points", attribute, increase)); } else { currentUser.user.MessageHandler("You don't have enough points to increase the rank of " + attribute); //this will put us back at the level up stats page currentUser.currentStep = ScriptSteps.Step1; currentUser.lastStep = ScriptSteps.None; } if (currentUser.user.Player.PointsToSpend == 0) { state = User.User.UserState.TALKING; usersLevelingUp.Remove(currentUser); currentUser.user.MessageHandler(""); } } else { currentUser.currentStep = ScriptSteps.Step1; currentUser.lastStep = ScriptSteps.None; } return(state); }
public User.User.UserState InsertResponse(string response, string userId) { User.User.UserState state = User.User.UserState.CREATING_CHARACTER; if (string.IsNullOrEmpty(response)) { return(state); } TempChar specificUser = usersCreatingChars.Where(u => u.user.UserID == userId).SingleOrDefault(); //Get the confirmation from the previous selection if (specificUser.confirmStep != CreateCharSteps.NONE) { if (!ConfirmSelection(response)) { specificUser.currentStep = specificUser.confirmStep; //go back to the previous selection specificUser.lastStep = CreateCharSteps.NONE; } else { specificUser.currentStep = specificUser.nextStep; } specificUser.confirmStep = CreateCharSteps.NONE; return(state); } if (specificUser != null && specificUser.currentStep == CreateCharSteps.AWAITINGRESPONSE) { switch (specificUser.lastStep) { case CreateCharSteps.FIRST_NAME: specificUser.FirstName = response; specificUser.currentStep = CreateCharSteps.LAST_NAME; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; break; case CreateCharSteps.LAST_NAME: if (ValidatePlayerName(specificUser.user.UserID, response)) { if (String.Compare(response, "name", true) != 0) { specificUser.LastName = response; specificUser.currentStep = CreateCharSteps.PASSWORD; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } else { specificUser.currentStep = CreateCharSteps.FIRST_NAME; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } } else { specificUser.currentStep = CreateCharSteps.FIRST_NAME; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } break; case CreateCharSteps.PASSWORD: specificUser.Password = response; specificUser.currentStep = CreateCharSteps.PASSWORD_CHECK; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; break; case CreateCharSteps.PASSWORD_CHECK: if (ValidatePlayerPassword(specificUser.user.UserID, response)) { specificUser.Password = response; specificUser.currentStep = CreateCharSteps.CLASS; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } else { specificUser.currentStep = CreateCharSteps.PASSWORD; specificUser.lastStep = CreateCharSteps.PASSWORD; } break; case CreateCharSteps.CLASS: { if (String.Compare(response.Substring(0, 1), "b", true) != 0) { int selection = 0; int.TryParse(response, out selection); int max = (GetMaxEnum <CharacterEnums.CharacterClass>() / 8) + 1; if (selection >= 1 && selection <= max) { specificUser.Class = (CharacterEnums.CharacterClass)(1 << selection); specificUser.confirmStep = CreateCharSteps.CLASS; specificUser.currentStep = CreateCharSteps.CLASS; specificUser.nextStep = CreateCharSteps.GENDER; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } else { specificUser.currentStep = CreateCharSteps.CLASS; specificUser.lastStep = CreateCharSteps.CLASS; } } else { specificUser.currentStep = CreateCharSteps.FIRST_NAME; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } break; } case CreateCharSteps.GENDER: { if (String.Compare(response.Substring(0, 1), "b", true) != 0) { int selection = 0; int.TryParse(response, out selection); selection--; if (selection >= 0 && selection <= GetMaxEnum <CharacterEnums.Genders>()) { specificUser.Gender = (CharacterEnums.Genders)selection; specificUser.currentStep = CreateCharSteps.RACE; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } else { specificUser.currentStep = CreateCharSteps.GENDER; specificUser.lastStep = CreateCharSteps.GENDER; } } else { specificUser.currentStep = CreateCharSteps.CLASS; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } break; } case CreateCharSteps.RACE: { if (String.Compare(response.Substring(0, 1), "b", true) != 0) { int selection = 0; int.TryParse(response, out selection); selection--; if (selection >= 0 && selection <= GetMaxEnum <CharacterEnums.CharacterRace>()) { specificUser.Race = (CharacterEnums.CharacterRace)selection; specificUser.confirmStep = CreateCharSteps.RACE; specificUser.currentStep = CreateCharSteps.RACE; specificUser.nextStep = CreateCharSteps.LANGUAGE; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } else { specificUser.currentStep = CreateCharSteps.RACE; specificUser.lastStep = CreateCharSteps.RACE; } } else { specificUser.currentStep = CreateCharSteps.GENDER; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } break; } case CreateCharSteps.LANGUAGE: { if (String.Compare(response.Substring(0, 1), "b", true) != 0) { int selection = 0; int.TryParse(response, out selection); selection--; if (selection >= 0 && selection <= GetMaxEnum <CharacterEnums.Languages>()) { specificUser.Language = (CharacterEnums.Languages)selection; specificUser.currentStep = CreateCharSteps.SKIN_TYPE; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } else { specificUser.currentStep = CreateCharSteps.LANGUAGE; specificUser.lastStep = CreateCharSteps.LANGUAGE; } } else { specificUser.currentStep = CreateCharSteps.RACE; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } break; } case CreateCharSteps.SKIN_TYPE: { if (String.Compare(response.Substring(0, 1), "b", true) != 0) { int selection = 0; int.TryParse(response, out selection); selection--; if (selection >= 0 && selection <= GetMaxEnum <CharacterEnums.SkinType>()) { specificUser.SkinType = (CharacterEnums.SkinType)selection; specificUser.currentStep = CreateCharSteps.SKIN_COLOR; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } else { specificUser.currentStep = CreateCharSteps.SKIN_TYPE; specificUser.lastStep = CreateCharSteps.SKIN_TYPE; } } else { specificUser.currentStep = CreateCharSteps.LANGUAGE; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } break; } case CreateCharSteps.SKIN_COLOR: { if (String.Compare(response.Substring(0, 1), "b", true) != 0) { int selection = 0; int.TryParse(response, out selection); selection--; if (selection >= 0 && selection <= GetMaxEnum <CharacterEnums.SkinColors>()) { specificUser.SkinColor = (CharacterEnums.SkinColors)selection; specificUser.currentStep = CreateCharSteps.HAIR_COLOR; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } else { specificUser.currentStep = CreateCharSteps.SKIN_COLOR; specificUser.lastStep = CreateCharSteps.SKIN_COLOR; } } else { specificUser.currentStep = CreateCharSteps.SKIN_TYPE; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } break; } case CreateCharSteps.HAIR_COLOR: { if (String.Compare(response.Substring(0, 1), "b", true) != 0) { int selection = 0; int.TryParse(response, out selection); selection--; if (selection >= 0 && selection <= GetMaxEnum <CharacterEnums.HairColors>()) { specificUser.HairColor = (CharacterEnums.HairColors)selection; specificUser.currentStep = CreateCharSteps.EYE_COLOR; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } else { specificUser.currentStep = CreateCharSteps.HAIR_COLOR; specificUser.lastStep = CreateCharSteps.HAIR_COLOR; } } else { specificUser.currentStep = CreateCharSteps.SKIN_COLOR; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } break; } case CreateCharSteps.EYE_COLOR: { if (String.Compare(response.Substring(0, 1), "b", true) != 0) { int selection = 0; int.TryParse(response, out selection); selection--; if (selection >= 0 && selection <= GetMaxEnum <CharacterEnums.EyeColors>()) { specificUser.EyeColor = (CharacterEnums.EyeColors)selection; specificUser.currentStep = CreateCharSteps.BUILD; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } else { specificUser.currentStep = CreateCharSteps.EYE_COLOR; specificUser.lastStep = CreateCharSteps.EYE_COLOR; } } else { specificUser.currentStep = CreateCharSteps.HAIR_COLOR; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } break; } case CreateCharSteps.BUILD: { if (String.Compare(response.Substring(0, 1), "b", true) != 0) { int selection = 0; int.TryParse(response, out selection); selection--; if (selection >= 0 && selection <= GetMaxEnum <CharacterEnums.BodyBuild>()) { specificUser.Build = (CharacterEnums.BodyBuild)selection; specificUser.currentStep = CreateCharSteps.WEIGHT; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } else { specificUser.currentStep = CreateCharSteps.BUILD; specificUser.lastStep = CreateCharSteps.BUILD; } } else { specificUser.currentStep = CreateCharSteps.EYE_COLOR; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } break; } case CreateCharSteps.WEIGHT: { double temp = 0; double.TryParse(response, out temp); BsonDocument doc = _generalCollection.FindOneAs <BsonDocument>(Query.EQ("_id", "BodyWeight")).AsBsonDocument; BsonArray arr = doc["Genders"].AsBsonArray; BsonArray arr2 = arr.Where(a => a["type"].AsString == specificUser.Gender.ToString().CamelCaseWord()).SingleOrDefault()["Weights"].AsBsonArray; doc = arr2.Where(a => a.AsBsonDocument["name"] == specificUser.Build.ToString().CamelCaseWord()).SingleOrDefault().AsBsonDocument; double min = doc["min"].AsInt32; //these need to be converted to doubles in DB double max = doc["max"].AsInt32; if (temp >= min && temp <= max) { specificUser.Weight = temp; specificUser.currentStep = CreateCharSteps.HEIGHT; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } else { specificUser.currentStep = CreateCharSteps.WEIGHT; specificUser.lastStep = CreateCharSteps.WEIGHT; } break; } case CreateCharSteps.HEIGHT: { double temp = 0; double.TryParse(response, out temp); //get the min and max height for each race from DB and validate BsonDocument doc = _generalCollection.FindOneAs <BsonDocument>(Query.EQ("_id", "Heights")).AsBsonDocument; BsonArray arr = doc["Types"].AsBsonArray; double min = 0.0d, max = 0.0d; foreach (BsonDocument height in arr) { if (height["Name"] == specificUser.Race.ToString().ToUpper()) { min = height["Min"].AsDouble; //these need to be converted to doubles in DB max = height["Max"].AsDouble; break; } } if (temp >= min && temp <= max) { specificUser.Height = temp; specificUser.currentStep = CreateCharSteps.SUCCEEDED; specificUser.lastStep = CreateCharSteps.AWAITINGRESPONSE; } else { specificUser.currentStep = CreateCharSteps.HEIGHT; specificUser.lastStep = CreateCharSteps.HEIGHT; } break; } default: //something has gone terribly wrong if we get here break; } } return(state); }
public void SendToClients(User.User.UserState state, string message) { SendToClients(state, System.Text.Encoding.ASCII.GetBytes(message)); }
public static User.User GetAUserPlusState(string id, User.User.UserState state = User.User.UserState.TALKING) { Dictionary <Socket, User.User> tempList = new Dictionary <Socket, User.User>(clientSocketList); return(tempList.Where(c => c.Value.UserID == id && c.Value.CurrentState == state).FirstOrDefault().Value); }