public string CreateCharacter(string message) { CharacterCreation nChar = new CharacterCreation(message); Account targetAccount = Account.LoadAccount(nChar.UserId); if(targetAccount == null) { return "Invalid account"; } if (targetAccount.SessionId != nChar.SessionId) { return "Invalid session Id"; } Character chr; try { chr = new Character() { AccountName = targetAccount.UserName, CharacterHobby = (uint)nChar.Hobby, CharacterName = nChar.Name, CharacterProfession = (uint)nChar.Profession, CharacterRace = (uint)nChar.Race, CharacterTalent = (uint)nChar.Talent, CharacterVice = (uint)nChar.Vice, CharacterVirtue = (uint)nChar.Virtue, MoralsAuthority = (uint)nChar.Authority, MoralsCare = (uint)nChar.Authority, MoralsFairness = (uint)nChar.Fairness, MoralsLoyalty = (uint)nChar.Loyalty, MoralsTradition = (uint)nChar.Tradition, Sex = nChar.Sex, SkinColor = (uint)nChar.SkinColor, HairColor = (uint)nChar.HairColor, HairStyle = (uint)nChar.HairStyle, }; } catch { return "Invalid character data; likely a negative number passed to an unsigned field."; } if (!chr.ValidateCharacter()) { return "Character violates rules of character creation."; } if(targetAccount.LoadCharacter(chr.CharacterName) != null) { return "A character with that name already exists"; } if (!targetAccount.NewCharacter(chr)) { return "Unable to save character"; } try { Aspiration asp = Aspiration.GetAspiration((uint)nChar.Aspiration); foreach (uint ab in asp.Abilities) { chr.Abilities[ab] += 1; } int skills = 3; foreach (uint sk in asp.Skills) { if (!chr.Skills.ContainsKey(sk)) { chr.Skills.Add(sk, 2); skills--; } if (skills == 0) break; } } catch { return "Failed to parse aspiration."; } if (!targetAccount.SaveCharacter(chr)) { return "Could not save character."; } return "Success: " + chr.CharacterName; }