public string ExecuteScript(string userId) { string message = null; TempChar specificUser = usersCreatingChars.Where(u => u.user.UserID == userId).SingleOrDefault(); if (specificUser.confirmStep != CreateCharSteps.NONE && specificUser.currentStep != CreateCharSteps.AWAITINGRESPONSE) { switch (specificUser.confirmStep) { case CreateCharSteps.CLASS: message = DisplayClassInfo(specificUser.Class); break; case CreateCharSteps.RACE: message = DisplayRaceInfo(specificUser.Race); break; } specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; return(message); } if (specificUser != null && specificUser.lastStep != specificUser.currentStep) { switch (specificUser.currentStep) { case CreateCharSteps.FIRST_NAME: message = AskForFirstName(); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.FIRST_NAME; break; case CreateCharSteps.LAST_NAME: message = AskForLastName(); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.LAST_NAME; break; case CreateCharSteps.PASSWORD: message = AskForPassword(); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.PASSWORD; break; case CreateCharSteps.PASSWORD_CHECK: message = ReEnterPassword(); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.PASSWORD_CHECK; break; case CreateCharSteps.CLASS: message = AskForClass(); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.CLASS; break; case CreateCharSteps.RACE: message = AskForRace(); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.RACE; break; case CreateCharSteps.GENDER: message = AskForGender(); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.GENDER; break; case CreateCharSteps.LANGUAGE: message = AskForLanguage(); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.LANGUAGE; break; case CreateCharSteps.SKIN_TYPE: message = AskForSkinType(); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.SKIN_TYPE; break; case CreateCharSteps.SKIN_COLOR: message = AskForSkinColor(); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.SKIN_COLOR; break; case CreateCharSteps.BUILD: message = AskForBuildType(); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.BUILD; break; case CreateCharSteps.HAIR_COLOR: message = AskForHairColor(); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.HAIR_COLOR; break; case CreateCharSteps.EYE_COLOR: message = AskForEyeColor(); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.EYE_COLOR; break; case CreateCharSteps.WEIGHT: message = AskForWeight(specificUser.Gender, specificUser.Build); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.WEIGHT; break; case CreateCharSteps.HEIGHT: message = AskForHeight(specificUser.Race); specificUser.currentStep = CreateCharSteps.AWAITINGRESPONSE; specificUser.lastStep = CreateCharSteps.HEIGHT; break; case CreateCharSteps.SUCCEEDED: Character.Iactor newChar = new Character.Character(specificUser.Race, specificUser.Class, specificUser.Gender, specificUser.Language, specificUser.SkinColor, specificUser.SkinType, specificUser.HairColor, specificUser.EyeColor, specificUser.Build); newChar.FirstName = specificUser.FirstName; newChar.LastName = specificUser.LastName; newChar.Weight = specificUser.Weight; newChar.Height = specificUser.Height; newChar.Password = specificUser.Password; newChar.Save(); //this creates the ID specificUser.user.Player.ID = newChar.ID; specificUser.user.UserID = specificUser.user.Player.ID; specificUser.user.Player.Load(specificUser.user.UserID); AssignStatPoints(specificUser.user.Player); specificUser.user.Player.Save(); //we updated the stats now save them. message = "Character created! Welcome " + specificUser.user.Player.FirstName + " " + specificUser.user.Player.LastName + "!"; specificUser.user.CurrentState = User.User.UserState.TALKING; specificUser.user.InBuffer = "look\r\n"; usersCreatingChars.Remove(specificUser); break; case CreateCharSteps.AWAITINGRESPONSE: default: break; } } else { if (specificUser != null) { if (specificUser.currentStep == CreateCharSteps.LAST_NAME) { message = "A character with that name combination already exists! Select a different last name or name combination."; } else if (specificUser.lastStep == CreateCharSteps.PASSWORD) { message = "Passwords did not match! Please try again."; specificUser.currentStep = CreateCharSteps.PASSWORD; } else if (specificUser.currentStep == CreateCharSteps.RACE || specificUser.currentStep == CreateCharSteps.GENDER || specificUser.currentStep == CreateCharSteps.LANGUAGE || specificUser.currentStep == CreateCharSteps.SKIN_TYPE || specificUser.currentStep == CreateCharSteps.SKIN_COLOR || specificUser.currentStep == CreateCharSteps.BUILD) { message = "Invalid selection! Please try again."; } else if (specificUser.currentStep == CreateCharSteps.WEIGHT) { message = "That is an invalid weight for the body type selected! Please choose a weight within the range."; } specificUser.lastStep = CreateCharSteps.NONE; } } return(message); }
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); }