internal static Skill FromString(string base64String)
 {
     if (string.IsNullOrEmpty(base64String))
     {
         Log.Error("Skill.FromString with empty value!");
         return(new Skill(Skill.SkillType.double_punch));
     }
     string[] parts = Conv.StringPartsFromBase64(base64String, "Skill");
     return(new Skill((Skill.SkillType)Conv.getIntFromParts(parts, "a"))
     {
         Level = new CDouble(Conv.getStringFromParts(parts, "b")),
         ShadowCloneCount = Conv.getCDoubleFromParts(parts, "c", false),
         CurrentDuration = Conv.getLongFromParts(parts, "d"),
         Extension = SkillExtension.FromString(Conv.getStringFromParts(parts, "e"))
     });
 }