Translate into English
+ Расширенный поиск
  • Пользователи
  • Правила форума
  • Регистрация
  • Сайт
К странице...
  • Вступай в группу Гиды по форуму (подробнее)
  • Все новости форума можно узнать из нашего паблика в ВК
  • Еженедельные обновления на форуме можно узнать здесь
Вернуться   Prosims: новости, обзоры, дополнения, файлы, коды, объекты, скины и скриншоты The Sims 3 и The Sims 2 — Симы форева ;) > The Sims 3: игра и дополнения > Редакторы, программы и патчи
Перезагрузить страницу TS3CreateResourceCfg
Редакторы, программы и патчи Кофр гениального мастера или ящик Пандоры... Что выберете вы, получив все возможные инструменты креатора и игрока в The Sims 3?

Результаты опроса: Нужная программа?
Да 9 90.00%
Нет 1 10.00%
Голосовавшие: 10. Вы ещё не голосовали в этом опросе

Ответ
  Опции темы Опции просмотра
Старый 23.10.2012, 23:49   #1
Мальчег TeMochkiN меню пользователя TeMochkiN
бывалый

 Аватар для TeMochkiN
 
Репутация: 12  
Сообщений: 102
Профиль на Thesims3.com
The Sims 3 TS3CreateResourceCfg

Простенькая программа для создания файла Resource.cfg в правильном месте с правильным содержимым. Она в основном ориентирована на новичков, которые не всегда понимают, почему у них не работают моды в игре.
Версия программы 1.1.0.5

Для запуска программы необходим установленный на компьютере Microsoft .NET Framework 3.5 Client Profile
Но не спешите его скачивать и устанавливать, может он уже установлен у вас, попробуйте сначала просто запустить саму программу TS3CreateResourceCfg.

Информация об установленной игре берется из реестра операционной системы, поэтому игра должна быть установлена корректно.
При каких-либо ошибках отписывайтесь в данной теме.

Скачать программу:
https://yadi.sk/d/1LWt4YXDbz3wq

Исходный код
Код:
using Microsoft.Win32;
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Threading;

namespace TS3CreateResourceCfg
{
    class Program
    {
        #region Is64BitOperatingSystem (IsWow64Process)

        /// <summary>
        /// The function determines whether the current operating system is a 
        /// 64-bit operating system.
        /// </summary>
        /// <returns>
        /// The function returns true if the operating system is 64-bit; 
        /// otherwise, it returns false.
        /// </returns>
        public static bool Is64BitOperatingSystem()
        {
            if (IntPtr.Size == 8)  // 64-bit programs run only on Win64
            {
                return true;
            }
            else  // 32-bit programs run on both 32-bit and 64-bit Windows
            {
                // Detect whether the current process is a 32-bit process 
                // running on a 64-bit system.
                bool flag;
                return ((DoesWin32MethodExist("kernel32.dll", "IsWow64Process") &&
                    IsWow64Process(GetCurrentProcess(), out flag)) && flag);
            }
        }

        /// <summary>
        /// The function determins whether a method exists in the export 
        /// table of a certain module.
        /// </summary>
        /// <param name="moduleName">The name of the module</param>
        /// <param name="methodName">The name of the method</param>
        /// <returns>
        /// The function returns true if the method specified by methodName 
        /// exists in the export table of the module specified by moduleName.
        /// </returns>
        static bool DoesWin32MethodExist(string moduleName, string methodName)
        {
            IntPtr moduleHandle = GetModuleHandle(moduleName);
            if (moduleHandle == IntPtr.Zero)
            {
                return false;
            }
            return (GetProcAddress(moduleHandle, methodName) != IntPtr.Zero);
        }

        [DllImport("kernel32.dll")]
        static extern IntPtr GetCurrentProcess();

        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        static extern IntPtr GetModuleHandle(string moduleName);

        [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
        static extern IntPtr GetProcAddress(IntPtr hModule,
            [MarshalAs(UnmanagedType.LPStr)]string procName);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool IsWow64Process(IntPtr hProcess, out bool wow64Process);

        #endregion

        static string SaveDir, InstallDir;
        static Localization locale;
        static ConsoleKeyInfo cki;

        static void Main(string[] args)
        {
            //Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");

            if (Thread.CurrentThread.CurrentUICulture.LCID == 1049)
                locale = new LocalizationRu();
            else
                locale = new Localization();

            Console.Title = locale.Title;
            bool InstallDirError = false;
            string[] lines = {  "Priority 502",
                                @"PackedFile Mods/Overrides/*.package",
                                "Priority 501" ,
                                @"DirectoryFiles  Mods/Files/... autoupdate",
                                "Priority 500",
                                @"PackedFile Mods/Packages/*.package",
                                @"PackedFile Mods/Packages/*/*.package",
                                @"PackedFile Mods/Packages/*/*/*.package",
                                @"PackedFile Mods/Packages/*/*/*/*.package",
                                @"PackedFile Mods/Packages/*/*/*/*/*.package",
                                @"PackedFile Mods/dbcss/*.dbc",
                                @"PackedFile Mods/dbcss/*/*.dbc",
                                "Priority 499",
                                @"PackedFile Mods/Test/*.package",
                                "Priority -50",
                                @"PackedFile Mods/Probation/*.package"  };
            try
            {
                InstallDir = Registry.LocalMachine.OpenSubKey(
                    Is64BitOperatingSystem() ? @"SOFTWARE\Wow6432Node\Sims\The Sims 3" : @"SOFTWARE\Sims\The Sims 3"
                    ).GetValue("Install Dir").ToString();
            }
            catch (Exception e)
            {
                Console.WriteLine(locale.GameNotFound + "\n");
                InstallDirError = true;
            }
            if (!InstallDirError)
            {
                if (File.Exists(InstallDir + @"\Resource.cfg"))
                {
                    Console.WriteLine(locale.FileExists, InstallDir);
                askAgain1:
                    cki = Console.ReadKey(true);
                if (cki.Key == locale.Yes)
                    CreateResourceCfgInstallDir(lines, InstallDir.ToString());
                else if (cki.Key == locale.No)
                    Console.WriteLine(locale.SkippedByUser);
                else if (cki.Key == ConsoleKey.Escape)
                    Environment.Exit(0);
                else
                {
                    Console.WriteLine(locale.KeyNotRecognized);
                    goto askAgain1;
                }
                    Console.WriteLine();
                }
                else CreateResourceCfgInstallDir(lines, InstallDir.ToString());
            }

            if (args.Length == 0)
                SaveDir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
                    + @"\Electronic Arts\The Sims 3";
            else SaveDir = args[0];
            if (!Directory.Exists(SaveDir + @"\Mods"))
                Directory.CreateDirectory(SaveDir + @"\Mods");
            if (File.Exists(SaveDir + @"\Mods\Resource.cfg"))
            {
                Console.WriteLine(locale.FileExists, SaveDir + "\\Mods\\");
            askAgain2:
                cki = Console.ReadKey(true);
                if (cki.Key == locale.Yes)
                    CreateResourceCfgSaveDir(lines, SaveDir);
                else if (cki.Key == locale.No)
                    Console.WriteLine(locale.SkippedByUser);
                else if (cki.Key == ConsoleKey.Escape)
                    Environment.Exit(0);
                else
                {
                    Console.WriteLine(locale.KeyNotRecognized);
                    goto askAgain2;
                }
            }
            else
            {
                CreateResourceCfgSaveDir(lines, SaveDir);
            }
            if (Thread.CurrentThread.CurrentUICulture.LCID == 1049)
            {
                Console.WriteLine("\nЗапустить S3Repacker? (д = да, н = нет)");
                cki = Console.ReadKey(true);
                if (cki.Key == ConsoleKey.L)
                {
                    FileInfo s3Repacker = new FileInfo(Environment.CurrentDirectory + "\\S3Repacker.exe");
                    if (s3Repacker.Exists)
                    {
                        Process.Start(s3Repacker.FullName);
                    }
                    else
                    {
                        Console.WriteLine("S3Repacker не найден! Он должен находиться в той же папке, что и данная программа.\nНажмите любую клавишу для выхода.");
                        Console.ReadKey(true);
                    }
                }
            }
            else
            {
                Console.WriteLine("\nPress any key to exit");
                Console.ReadKey(true);
            }
        }

        static void CreateResourceCfgInstallDir(string[] lines, string InstallDir)
        {
            try
            {
                File.WriteAllLines(InstallDir + @"\Resource.cfg", lines);
                Console.WriteLine(locale.SuccessfullyCreated + InstallDir);
                if (!Directory.Exists(InstallDir + @"\Mods"))
                    Directory.CreateDirectory(InstallDir + @"\Mods");
                if (!Directory.Exists(InstallDir + @"\Mods\dbcss"))
                    Directory.CreateDirectory(InstallDir + @"\Mods\dbcss");
                if (!Directory.Exists(InstallDir + @"\Mods\Files"))
                    Directory.CreateDirectory(InstallDir + @"\Mods\Files");
                if (!Directory.Exists(InstallDir + @"\Mods\Overrides"))
                    Directory.CreateDirectory(InstallDir + @"\Mods\Overrides");
                if (!Directory.Exists(InstallDir + @"\Mods\Packages"))
                    Directory.CreateDirectory(InstallDir + @"\Mods\Packages");
                if (!Directory.Exists(InstallDir + @"\Mods\Probation"))
                    Directory.CreateDirectory(InstallDir + @"\Mods\Probation");
                if (!Directory.Exists(InstallDir + @"\Mods\Test"))
                    Directory.CreateDirectory(InstallDir + @"\Mods\Test");
            }
            catch (UnauthorizedAccessException e)
            {
                ReRunApplication(e);
            }
            catch (Exception e) { Console.WriteLine(e.Message); }
        }

        static void CreateResourceCfgSaveDir(string[] lines, string SaveDir)
        {
            try
            {
                using (StreamWriter ResourceCfg = new StreamWriter(SaveDir + @"\Mods\Resource.cfg"))
                {
                    for (int i = 0; i < lines.Length; i++)
                        if (i > 3 & i < 12)
                        {
                            if (lines[i].Contains(@"Mods/"))
                                lines[i] = lines[i].Replace(@"Mods/", "");
                            ResourceCfg.WriteLine(lines[i]);
                            if (!Directory.Exists(SaveDir + @"\Mods\Packages"))
                                Directory.CreateDirectory(SaveDir + @"\Mods\Packages");
                        }

                }
                Console.WriteLine(locale.SuccessfullyCreated + SaveDir);
            }
            catch (UnauthorizedAccessException e)
            {
                ReRunApplication(e);
            }
            catch (Exception e) { Console.WriteLine(e.Message); }
        }

        static void ReRunApplication(UnauthorizedAccessException e)
        {
            Console.WriteLine(locale.UnauthorizedAccessException, e.Message);
            WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
            bool hasAdministrativeRight = principal.IsInRole(WindowsBuiltInRole.Administrator);
            if (!hasAdministrativeRight)
            {
                ProcessStartInfo processInfo = new ProcessStartInfo();
                processInfo.Verb = "runas";
                processInfo.Arguments = SaveDir;
                processInfo.FileName = Environment.GetCommandLineArgs()[0];
                try
                {
                    Process.Start(processInfo);
                    Environment.Exit(0);
                }
                catch (Win32Exception) { Console.WriteLine(locale.Win32Exception); }
            }
        }
    }

    class Localization
    {
        public string Title, SkippedByUser, GameNotFound, FileExists,
            KeyNotRecognized, SuccessfullyCreated, UnauthorizedAccessException,
                Win32Exception;
        public ConsoleKey Yes, No;

        public Localization()
        {
            Title = "Creating a file Resource.cfg";
            SkippedByUser = "Skipped by user";
            GameNotFound = "Not found installed base game";
            FileExists = "In \"{0}\" file Resource.cfg already exists \nOverwrite it? (Y = yes, N = no, Esc = exit)";
            KeyNotRecognized = "You have pressed key for which the action is not defined. Press one of the suggested keys above.";
            SuccessfullyCreated = "File Resource.cfg successfully created in the folder:\n";
            UnauthorizedAccessException = "When you try to access the folder with the game occurred an error:\n{0}\nThe operation requires elevation.\nPrompt the user for administrative rights.";
            Win32Exception = "The operation failed.";
            Yes = ConsoleKey.Y;
            No = ConsoleKey.N;
        }
    }

    class LocalizationRu : Localization
    {
        public LocalizationRu()
        {
            Title = "Создание файла Resource.cfg";
            SkippedByUser = "Пропущено пользователем";
            GameNotFound = "Не найдена установленная базовая игра";
            FileExists = "В папке \"{0}\" уже существует файл Resource.cfg\nПерезаписать его? (Д = да, Н = нет, Esc = выход)";
            KeyNotRecognized = "Вы нажали клавишу, действие для которой не определено.\nНажмите одну из предложенных клавиш выше.";
            SuccessfullyCreated = "Файл Resource.cfg успешно создан в папке:\n";
            UnauthorizedAccessException = "При попытке доступа к папке с игрой возникла ошибка:\n{0}\nОперация требует повышения прав.\nЗапрос у пользователя административных прав.";
            Win32Exception = "Операция не выполнена.";
            Yes = ConsoleKey.L;
            No = ConsoleKey.Y;
        }
    }
}
__________________
Найди ответ с помощью Гугл! ;)

Последний раз редактировалось TeMochkiN, 14.10.2014 в 01:39. Причина: Замена ссылки на загрузку программы
TeMochkiN вне форума   Ответить с цитированием
TeMochkiN
Посмотреть профиль
Отправить личное сообщение для TeMochkiN
Найти ещё сообщения от TeMochkiN
Ответ

« Предыдущая тема | Следующая тема »

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Опции темы
Версия для печати Версия для печати
Отправить по электронной почте Отправить по электронной почте
Опции просмотра
Линейный вид Линейный вид
Комбинированный вид Комбинированный вид
Древовидный вид Древовидный вид
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Обратная связь / Архив / Вверх

Часовой пояс GMT +4, время: 08:47

vBulletin® Version 3.6.12. Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
При сотрудничестве с Electronic Arts Inc.
EA Россия

Запрещено копирование и публикация любых материалов форума на другие порталы
без письменного разрешения администрации и указания ссылки на prosims.ru

Рейтинг@Mail.ru