コード例 #1
0
        public SaveEditTask Refuel()
        {
            var run = new Action(() =>
            {
                try
                {
                    var content = saveFile.content;
                    var sb      = new StringBuilder();

                    var fuelPresetNames  = new string[] { "연료통의 1000배", "연료통의 100배", "연료통의 10배", "연료통의 5배", "100%", "50%", "10%", "5%", "0%(...)" };
                    var fullPresetValues = new string[] {
                        "1000", "100", "10", "5", "1", "0.5", "0.1", "0.05", "0"
                    };
                    var fuelId = "";
                    {
                        var res = ListInputBox.Show("연료 수준 선택", "할당된 트럭에 적용할 연료 수준을 선택하십시오.", fuelPresetNames);
                        if (res == -1)
                        {
                            return;
                        }
                        fuelId = fullPresetValues[res];
                    }

                    foreach (var line in content.Split('\n'))
                    {
                        var str = line;
                        if (line.Contains("fuel_relative:"))
                        {
                            str = " fuel_relative: " + fuelId;
                        }
                        sb.Append(str + "\n");
                    }
                    saveFile.Save(sb.ToString());
                    MessageBox.Show("모든 트럭의 연료를 지정한 값으로 변경했습니다.", "완료");
                }
                catch (Exception e)
                {
                    MessageBox.Show("오류가 발생했습니다.", "오류");
                    Console.WriteLine(e);
                    throw;
                }
            });

            return(new SaveEditTask
            {
                name = "연료 채우기",
                run = run,
                description = "세이브 내의 모든 트럭의 연료를 설정합니다."
            });
        }
コード例 #2
0
        public SaveEditTask SharePaint()
        {
            var run = new Action(() =>
            {
                try
                {
                    var content       = saveFile.content;
                    var pattern0      = @"\beconomy : [\w\.]+ {";
                    var pattern1      = @"\bplayer: ([\w\.]+)\b";
                    var matchIndex    = Regex.Match(content, pattern0).Index;
                    var substr        = content.Substring(matchIndex);
                    string resultLine = null;
                    foreach (var str in substr.Split('\n'))
                    {
                        if (Regex.IsMatch(str, pattern1))
                        {
                            resultLine = Regex.Match(str, pattern1).Groups[1].Value;
                            break;
                        }
                        if (str.Trim() == "}")
                        {
                            break;
                        }
                    }

                    if (resultLine == null)
                    {
                        MessageBox.Show("손상된 세이브 파일입니다.", "오류");
                        return;
                    }

                    var operationNames = new string[] { "트럭, 불러오기", "트럭, 내보내기", "트레일러, 불러오기", "트레일러, 내보내기" };
                    var truck          = false;
                    var import         = false;
                    {
                        var res = ListInputBox.Show("작업 선택하기", "무엇의 페인트를 불러올까요? 내보낼까요?", operationNames);
                        if (res == -1)
                        {
                            return;
                        }
                        truck  = res < 2;
                        import = res % 2 == 0;
                    }

                    pattern0   = @"\bplayer : " + resultLine + " {";
                    pattern1   = @"\bassigned_" + (truck ? "truck" : "trailer") + @": ([\w\.]+)\b";
                    matchIndex = Regex.Match(content, pattern0).Index;
                    substr     = content.Substring(matchIndex);
                    resultLine = null;
                    foreach (var str in substr.Split('\n'))
                    {
                        if (Regex.IsMatch(str, pattern1))
                        {
                            resultLine = Regex.Match(str, pattern1).Groups[1].Value;
                            break;
                        }
                        if (str.Trim() == "}")
                        {
                            break;                    // End of the class
                        }
                    }
                    if (resultLine == "null")
                    {
                        if (truck)
                        {
                            MessageBox.Show("할당된 트럭이 없습니다.", "오류");
                        }
                        else
                        {
                            MessageBox.Show("할당된 트레일러가 없습니다.", "오류");
                        }
                        return;
                    }

                    string path;

                    var filter = (truck ? "트럭 페인트 파일 (*.paint0)|*.paint0|모든 파일 (*.*)|*.*" : "트레일러 페인트 파일 (*.paint1)|*.paint1|모든 파일 (*.*)|*.*");
                    if (import)
                    { // Import
                        OpenFileDialog dialog = new OpenFileDialog
                        {
                            Title  = "페인트 파일 선택",
                            Filter = filter
                        };
                        if (dialog.ShowDialog() != true)
                        {
                            return;
                        }
                        path = dialog.FileName;
                    }
                    else // Export
                    {
                        SaveFileDialog dialog = new SaveFileDialog
                        {
                            Title  = "페인트 내보내기",
                            Filter = filter
                        };
                        if (dialog.ShowDialog() != true)
                        {
                            return;
                        }
                        path = dialog.FileName;
                    }

                    pattern0   = @"\b" + (truck ? "vehicle" : "trailer") + " : " + resultLine + " {";
                    pattern1   = @"\baccessories\[\d*\]: ([\w\.]+)\b";
                    matchIndex = Regex.Match(content, pattern0).Index;
                    substr     = content.Substring(matchIndex);
                    resultLine = null;

                    if (import)
                    {
                        var str  = File.ReadAllText(path, Encoding.UTF8);
                        var strs = str.Split(';');
                        if (strs.Length != 8)
                        {
                            MessageBox.Show("손상된 페인트 파일입니다.", "오류");
                            return;
                        }
                        var paintjob = new Paintjob
                        {
                            mask_r_color = strs[0],
                            mask_g_color = strs[1],
                            mask_b_color = strs[2],
                            flake_color  = strs[3],
                            flip_color   = strs[4],
                            base_color   = strs[5],
                            data_path    = strs[6]
                        };

                        foreach (var line in substr.Split('\n'))
                        {
                            if (Regex.IsMatch(line, pattern1))
                            {
                                var id  = Regex.Match(line, pattern1).Groups[1].Value;
                                var p50 = @"\bvehicle_paint_job_accessory : " + id + " {";
                                if (!Regex.IsMatch(substr, p50))
                                {
                                    continue;
                                }
                                var matchIndex0 = Regex.Match(substr, p50).Index + matchIndex; // TODO you must escape p50 id can contain .
                                var substr0     = content.Substring(matchIndex0);
                                var index       = 0;
                                var sb          = new StringBuilder();
                                sb.Append(content.Substring(0, matchIndex0));
                                foreach (var line0 in substr0.Split('\n'))
                                {
                                    var str0 = line0;
                                    if (Regex.IsMatch(line0, @"\bdata_path:\s"".*?"""))
                                    {
                                        str0 = " data_path: " + paintjob.data_path + "";
                                    }
                                    if (Regex.IsMatch(line0, @"\bmask_r_color: \(.*?\)"))
                                    {
                                        str0 = " mask_r_color: " + paintjob.mask_r_color + "";
                                    }
                                    if (Regex.IsMatch(line0, @"\bmask_g_color: \(.*?\)"))
                                    {
                                        str0 = " mask_g_color: " + paintjob.mask_g_color + "";
                                    }
                                    if (Regex.IsMatch(line0, @"\bmask_b_color: \(.*?\)"))
                                    {
                                        str0 = " mask_b_color: " + paintjob.mask_b_color + "";
                                    }
                                    if (Regex.IsMatch(line0, @"\bflake_color: \(.*?\)"))
                                    {
                                        str0 = " flake_color: " + paintjob.flake_color + "";
                                    }
                                    if (Regex.IsMatch(line0, @"\bflip_color: \(.*?\)"))
                                    {
                                        str0 = " flip_color: " + paintjob.flip_color + "";
                                    }
                                    if (Regex.IsMatch(line0, @"\bbase_color: \(.*?\)"))
                                    {
                                        str0 = " base_color: " + paintjob.base_color + "";
                                    }
                                    Console.WriteLine("'" + Regex.Escape(str0) + "'");
                                    sb.AppendLine(str0);
                                    if (line0.Trim() == "}")
                                    {
                                        break;
                                    }
                                    index += line0.Length + 1;
                                }
                                sb.Append(content.Substring((int)(matchIndex0 + index + 1)));
                                content = sb.ToString();
                            }
                            if (line.Trim() == "}")
                            {
                                break;                     // End of the class
                            }
                        }
                        saveFile.Save(content);
                        MessageBox.Show("페인트를 불러왔습니다!", "완료");
                    }
                    else
                    {
                        var paintjob = new Paintjob();

                        foreach (var line in substr.Split('\n'))
                        {
                            if (Regex.IsMatch(line, pattern1))
                            {
                                var id  = Regex.Match(line, pattern1).Groups[1].Value;
                                var p50 = @"\bvehicle_paint_job_accessory : " + id + " {";
                                if (!Regex.IsMatch(substr, p50))
                                {
                                    continue;
                                }
                                var matchIndex0 = Regex.Match(substr, p50).Index + matchIndex; // TODO you must escape p50 id can contain .
                                var substr0     = content.Substring(matchIndex0);
                                var index       = 0;
                                foreach (var line0 in substr0.Split('\n'))
                                {
                                    if (Regex.IsMatch(line0, @"\bdata_path:\s("".*?"")"))
                                    {
                                        paintjob.data_path = Regex.Match(line0, @"\bdata_path:\s("".*?"")").Groups[1].Value;
                                    }
                                    if (Regex.IsMatch(line0, @"\bmask_r_color: (\(.*?\))"))
                                    {
                                        paintjob.mask_r_color = Regex.Match(line0, @"\bmask_r_color: (\(.*?\))").Groups[1].Value;
                                    }
                                    if (Regex.IsMatch(line0, @"\bmask_g_color: (\(.*?\))"))
                                    {
                                        paintjob.mask_g_color = Regex.Match(line0, @"\bmask_g_color: (\(.*?\))").Groups[1].Value;
                                    }
                                    if (Regex.IsMatch(line0, @"\bmask_b_color: (\(.*?\))"))
                                    {
                                        paintjob.mask_b_color = Regex.Match(line0, @"\bmask_b_color: (\(.*?\))").Groups[1].Value;
                                    }
                                    if (Regex.IsMatch(line0, @"\bflake_color: (\(.*?\))"))
                                    {
                                        paintjob.flake_color = Regex.Match(line0, @"\bflake_color: (\(.*?\))").Groups[1].Value;
                                    }
                                    if (Regex.IsMatch(line0, @"\bflip_color: (\(.*?\))"))
                                    {
                                        paintjob.flip_color = Regex.Match(line0, @"\bflip_color: (\(.*?\))").Groups[1].Value;
                                    }
                                    if (Regex.IsMatch(line0, @"\bbase_color: (\(.*?\))"))
                                    {
                                        paintjob.base_color = Regex.Match(line0, @"\bbase_color: (\(.*?\))").Groups[1].Value;
                                    }
                                    if (line0.Trim() == "}")
                                    {
                                        break;
                                    }
                                    index += line0.Length + 1;
                                }
                            }
                            if (line.Trim() == "}")
                            {
                                break;                     // End of the class
                            }
                        }
                        try
                        {
                            var data = paintjob.mask_r_color + ";" + paintjob.mask_g_color + ";" + paintjob.mask_b_color + ";" + paintjob.flake_color + ";" + paintjob.flip_color + ";" + paintjob.base_color + ";" + paintjob.data_path + ";";
                            File.WriteAllText(path, data, Encoding.UTF8);
                        }
                        catch (Exception)
                        {
                            MessageBox.Show("페인트를 내보낼 수 없습니다.", "오류");
                            throw;
                        }
                        MessageBox.Show("페인트를 내보냈습니다!", "완료");
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show("오류가 발생했습니다.", "오류");
                    Console.WriteLine(e);
                    throw;
                }
            });

            return(new SaveEditTask
            {
                name = "페인트 내보내기/불러오기",
                run = run,
                description = "트럭/트레일러의 페인트를 내보내거나 불러옵니다."
            });
        }
コード例 #3
0
        public SaveEditTask TruckEngineSet()
        {
            var run = new Action(() =>
            {
                try
                {
                    var content       = saveFile.content;
                    var pattern0      = @"\beconomy : [\w\.]+ {";
                    var pattern1      = @"\bplayer: ([\w\.]+)\b";
                    var matchIndex    = Regex.Match(content, pattern0).Index;
                    var substr        = content.Substring(matchIndex);
                    string resultLine = null;
                    foreach (var str in substr.Split('\n'))
                    {
                        if (Regex.IsMatch(str, pattern1))
                        {
                            resultLine = Regex.Match(str, pattern1).Groups[1].Value;
                            break;
                        }
                        if (str.Trim() == "}")
                        {
                            break;
                        }
                    }

                    pattern0   = @"\bplayer : " + resultLine + " {";
                    pattern1   = @"\bassigned_truck: ([\w\.]+)\b";
                    matchIndex = Regex.Match(content, pattern0).Index;
                    substr     = content.Substring(matchIndex);
                    resultLine = null;
                    foreach (var str in substr.Split('\n'))
                    {
                        if (Regex.IsMatch(str, pattern1))
                        {
                            resultLine = Regex.Match(str, pattern1).Groups[1].Value;
                            break;
                        }
                        if (str.Trim() == "}")
                        {
                            break;                    // End of the class
                        }
                    }

                    if (resultLine == null)
                    {
                        MessageBox.Show("손상된 세이브 파일입니다.", "오류");
                        return;
                    }
                    else if (resultLine == "null")
                    {
                        MessageBox.Show("할당된 트럭이 없습니다. 게임을 실행하여 트럭을 자신에게 할당하세요.", "오류");
                        return;
                    }

                    var engineNames = new string[] { "스카니아 신형 730", "스카니아 구형 730", "볼보 신형 750", "볼보 구형 750", "르노 프리미엄 380", "이베코 310(...)" };
                    var enginePaths = new string[] {
                        "/def/vehicle/truck/scania.s_2016/engine/dc16_730.sii",
                        "/def/vehicle/truck/scania.streamline/engine/dc16_730_2.sii",
                        "/def/vehicle/truck/volvo.fh16_2012/engine/d16g750.sii",
                        "/def/vehicle/truck/volvo.fh16/engine/d16g750.sii",
                        "/def/vehicle/truck/renault.premium/engine/dxi11_380.sii",
                        "/def/vehicle/truck/iveco.stralis/engine/cursor8_310hp.sii"
                    };
                    var enginePath = "";
                    {
                        var res = ListInputBox.Show("엔진 선택하기", "현재 할당된 트럭에 적용할 엔진을 선택하세요.\n참고로 스카니아와 볼보는 구형의 엔진 성능이 신형보다 좋습니다.\n"
                                                    + "확인 버튼 클릭 후 편집 작업 완료까지 어느 정도 시간이 걸리니 참고하시기 바랍니다.", engineNames);
                        if (res == -1)
                        {
                            return;
                        }
                        enginePath = enginePaths[res];
                    }

                    pattern0   = @"\bvehicle : " + resultLine + " {";
                    pattern1   = @"\baccessories\[\d*\]: ([\w\.]+)\b";
                    matchIndex = Regex.Match(content, pattern0).Index;
                    substr     = content.Substring(matchIndex);
                    resultLine = null;
                    foreach (var line in substr.Split('\n'))
                    {
                        if (Regex.IsMatch(line, pattern1))
                        {
                            var id          = Regex.Match(line, pattern1).Groups[1].Value;
                            var p50         = @"\bvehicle_(addon_|sound_|wheel_|drv_plate_|paint_job_)?accessory : " + id + " {";
                            var matchIndex0 = Regex.Match(substr, p50).Index + matchIndex;
                            var substr0     = content.Substring(matchIndex0);
                            var index       = 0;
                            foreach (var line0 in substr0.Split('\n'))
                            {
                                if (Regex.IsMatch(line0, @"\bdata_path:\s""\/def\/vehicle\/truck\/[^/]+?\/engine\/"))
                                {
                                    var sb = new StringBuilder();
                                    sb.Append(content.Substring(0, (int)(matchIndex0 + index)));
                                    sb.Append(" data_path: \"" + enginePath + "\"\n");
                                    sb.Append(content.Substring((int)(matchIndex0 + index + line0.Length + 1)));
                                    content = sb.ToString();
                                }
                                if (line0.Trim() == "}")
                                {
                                    break;
                                }
                                index += line0.Length + 1;
                            }
                        }
                        if (line.Trim() == "}")
                        {
                            break;                     // End of the class
                        }
                    }
                    saveFile.Save(content);
                    MessageBox.Show("엔진을 변경했습니다!", "완료");
                }
                catch (Exception e)
                {
                    MessageBox.Show("오류가 발생했습니다.", "오류");
                    Console.WriteLine(e);
                    throw;
                }
            });

            return(new SaveEditTask
            {
                name = "트럭 엔진 지정",
                run = run,
                description = "트럭의 엔진을 설정 가능한 몇 가지 엔진으로 변경합니다."
            });
        }