internal static void Read(int version, BinaryReader br, int ParametersCount, SPECIAL_PARAMETERS SPECIAL_PARAMETERS)
 {
     SPECIAL_PARAMETERS.ParameterTypes = new int[ParametersCount];
     SPECIAL_PARAMETERS.unk176         = new int[ParametersCount];
     for (int i = 0; i < ParametersCount; i++)
     {
         SPECIAL_PARAMETERS.ParameterTypes[i] = br.ReadInt32();
         ReadParamter(version, br, SPECIAL_PARAMETERS, SPECIAL_PARAMETERS.ParameterTypes[i]);
         if (version >= 176)
         {
             SPECIAL_PARAMETERS.unk176[i] = br.ReadInt32();
         }
     }
     SPECIAL_PARAMETERS.UseItemIDs = new int[SPECIAL_PARAMETERS.UseItemCount];
     for (int i = 0; i < SPECIAL_PARAMETERS.UseItemCount; i++)
     {
         SPECIAL_PARAMETERS.UseItemIDs[i] = br.ReadInt32();
     }
     SPECIAL_PARAMETERS.CompleteTaskIDs = new int[SPECIAL_PARAMETERS.CompleteTaskCount];
     for (int i = 0; i < SPECIAL_PARAMETERS.CompleteTaskCount; i++)
     {
         SPECIAL_PARAMETERS.CompleteTaskIDs[i] = br.ReadInt32();
     }
     SPECIAL_PARAMETERS.CompleteTaskIDsSpace = new int[SPECIAL_PARAMETERS.CompleteTaskCount];
     if (version >= 153)
     {
         for (int i = 0; i < SPECIAL_PARAMETERS.CompleteTaskCount; i++)
         {
             SPECIAL_PARAMETERS.CompleteTaskIDsSpace[i] = br.ReadInt32();
         }
     }
 }
 internal static void Write(int version, int combinedswitch, BinaryWriter bw, SPECIAL_PARAMETERS SPECIAL_PARAMETERS)
 {
     for (int i = 0; i < SPECIAL_PARAMETERS.ParameterTypes.Length; i++)
     {
         if (CheckParameter(version, SPECIAL_PARAMETERS.ParameterTypes[i]))
         {
             bw.Write(SPECIAL_PARAMETERS.ParameterTypes[i]);
             WriteParamter(version, bw, SPECIAL_PARAMETERS, SPECIAL_PARAMETERS.ParameterTypes[i]);
             if (version >= 176)
             {
                 bw.Write(SPECIAL_PARAMETERS.unk176[i]);
             }
         }
     }
     for (int i = 0; i < SPECIAL_PARAMETERS.UseItemCount; i++)
     {
         bw.Write(SPECIAL_PARAMETERS.UseItemIDs[i]);
     }
     for (int i = 0; i < SPECIAL_PARAMETERS.CompleteTaskCount; i++)
     {
         bw.Write(SPECIAL_PARAMETERS.CompleteTaskIDs[i]);
     }
     if (version >= 153)
     {
         for (int i = 0; i < SPECIAL_PARAMETERS.CompleteTaskCount; i++)
         {
             bw.Write(SPECIAL_PARAMETERS.CompleteTaskIDsSpace[i]);
         }
     }
 }
        internal static void ReadParamter(int version, BinaryReader br, SPECIAL_PARAMETERS SPECIAL_PARAMETERS, int ParameterType)
        {
            switch (ParameterType)
            {
            case 0:
                SPECIAL_PARAMETERS.FailWhenGetOffCarrier = br.ReadInt32();
                break;

            case 1:
                SPECIAL_PARAMETERS.TimeWhenRideCarrier = br.ReadInt32();
                break;

            case 2:
                SPECIAL_PARAMETERS.UseItemTimes = br.ReadInt32();
                break;

            case 3:
                SPECIAL_PARAMETERS.UseItemCount = br.ReadInt32();
                break;

            case 4:
                SPECIAL_PARAMETERS.UseItemIDsPointer = br.ReadInt32();
                break;

            case 5:
                SPECIAL_PARAMETERS.CompleteTaskTimes = br.ReadInt32();
                break;

            case 6:
                SPECIAL_PARAMETERS.CompleteTaskCount = br.ReadInt32();
                break;

            case 7:
                SPECIAL_PARAMETERS.CompleteTaskIDsPointer = br.ReadInt32();
                break;

            case 8:
                SPECIAL_PARAMETERS.ByCompleteTask = br.ReadInt32();
                break;

            case 9:
                SPECIAL_PARAMETERS.Parameter9 = br.ReadInt32();
                break;

            case 10:
                SPECIAL_PARAMETERS.GetOffCarrierID = br.ReadInt32();
                break;

            case 11:
                SPECIAL_PARAMETERS.RideCarrierID = br.ReadInt32();
                break;

            case 12:
                SPECIAL_PARAMETERS.need_story_book_collection = br.ReadInt32();
                break;

            case 13:
                SPECIAL_PARAMETERS.story_book_collection_count = br.ReadInt32();
                break;

            case 14:
                SPECIAL_PARAMETERS.CompleteTaskIDsSpacePointer = br.ReadInt32();
                break;
            }
        }
        internal static void WriteParamter(int version, BinaryWriter bw, SPECIAL_PARAMETERS SPECIAL_PARAMETERS, int ParameterType)
        {
            switch (ParameterType)
            {
            case 0:
                bw.Write(SPECIAL_PARAMETERS.FailWhenGetOffCarrier);
                break;

            case 1:
                bw.Write(SPECIAL_PARAMETERS.TimeWhenRideCarrier);
                break;

            case 2:
                bw.Write(SPECIAL_PARAMETERS.UseItemTimes);
                break;

            case 3:
                bw.Write(SPECIAL_PARAMETERS.UseItemCount);
                break;

            case 4:
                bw.Write(SPECIAL_PARAMETERS.UseItemIDsPointer);
                break;

            case 5:
                bw.Write(SPECIAL_PARAMETERS.CompleteTaskTimes);
                break;

            case 6:
                bw.Write(SPECIAL_PARAMETERS.CompleteTaskCount);
                break;

            case 7:
                bw.Write(SPECIAL_PARAMETERS.CompleteTaskIDsPointer);
                break;

            case 8:
                bw.Write(SPECIAL_PARAMETERS.ByCompleteTask);
                break;

            case 9:
                bw.Write(SPECIAL_PARAMETERS.Parameter9);
                break;

            case 10:
                bw.Write(SPECIAL_PARAMETERS.GetOffCarrierID);
                break;

            case 11:
                bw.Write(SPECIAL_PARAMETERS.RideCarrierID);
                break;

            case 12:
                bw.Write(SPECIAL_PARAMETERS.need_story_book_collection);
                break;

            case 13:
                bw.Write(SPECIAL_PARAMETERS.story_book_collection_count);
                break;

            case 14:
                bw.Write(SPECIAL_PARAMETERS.CompleteTaskIDsSpacePointer);
                break;
            }
        }