コード例 #1
0
ファイル: ServerService.cs プロジェクト: Zelknolf/Mundasia
 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;
 }