23.10.2012, 23:49
#1
бывалый
Сообщений: 102
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 .
Причина: Замена ссылки на загрузку программы
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 17:09
vBulletin® Version 3.6.12. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
При сотрудничестве с Electronic Arts Inc.
Запрещено копирование и публикация любых материалов форума на другие порталы без письменного разрешения администрации и указания ссылки на prosims.ru