Приветствуем вас на форуме проекта WoW Circle. Если вы читаете это, значит не зарегистрировались у нас. Для того, чтобы получить доступ к расширенным возможностям нашего форума нажмите сюда и пройди регистрацию, которая не займет у вас много времени. После регистрации будут доступны новые, более расширенные, возможности.
Shared SavedVariables

Упомянутые в теме пользователи:

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 12 из 19
  1. #1
    Заблокирован
    Регистрация
    14.12.2018
    Адрес
    Кровать твоей мамы
    Сообщений
    244
    Поблагодарил(а)
    44
    Получено благодарностей: 126 (сообщений: 93).
    Репутация: 126

    Shared SavedVariables

    Цель мода сделать SavedVariables общими для всех аккаунтов, что б не приходилось каждый раз лазить в WTF. Настраиваете аддоны 1 раз, и в дальнейшем при смене аккаунта все что остается сделать это выбрать нужный профиль в настройках аддонов, будто вы зашли на твинка в пределах 1 акка.
    По идеи должно хорошо сочитаться с ActionBarSaver, кто тестанет, отпишите.

    Скачать:
    http://www.mediafire.com/file/98n948...lobal.zip/file

    Установка:
    Распаковываете содержимое архива в директорию игры, там где лежит Wow.exe. В дальнейшем запускаете игру через инжектор из архива.
    Если у вас название экзешника игры отличается от обычного, например Wowcircle.exe, переименуйте инжектор в Wowcircle_mods.exe, либо сам клиент в Wow.exe.

    Мойнез из холдильника пропал это все ты!!1


    Нет, ты.

    global.dll


    main
    PHP код:
    #include <Windows.h>
    #include "Detours.hpp"
    #define GLOBAL "Global"

    Detourdetour;

    inline auto Hook()
    {
        
    detour->Detach(); // Восстанавливаем
        
    auto res = ((int32_t(__cdecl*)())detour->Address())(); // и вызываем оригинальную функцию
        
    detour->Attach(); // Хук на место

        
    auto acc = (char*)0x00c24418// Поле в котором лежит имя аккаунта
        
    if (strcmp(acc, GLOBAL) != 0) { // Если не равно Global
            
    strcpy(acc, GLOBAL); // Пишем Global
            
    for (auto i strlen(acc) + 1acc[i] != '\0'i++) // Если имя аккаунта длиннее Global
                
    acc[i] = '\0'// Заполняем разницу нолями
        
    }

        return 
    res;
    }

    BOOL WINAPI DllMain(HMODULE hModuleDWORD dwReasonLPVOID)
    {
        if (
    dwReason == DLL_PROCESS_ATTACH) {
            
    DisableThreadLibraryCalls(hModule);
            
    detour = new Detour(0x004de390, (int)Hook); // Записываем джамп на хук в процедуру которая вызывается для реквеста у сервера биндов/макросов и т.п.
        
    }

        return 
    TRUE;

    Detours.hpp
    PHP код:
    #pragma once
    #include <Windows.h>
    #include <vector>
    #include <cstdint>


    class Detour
    {
    public:
        
    Detour(int pFuncint pHook)
            : 
    m_pFunc(pFunc), m_pHook(pHook)
        {
            
    m_orig.reserve(6);
            
    m_path.reserve(6);

            for (
    int8_t i 06; ++i)
                
    m_orig.push_back(*(int*)(pFunc i));

            
    m_path.push_back(0x68);
            for (
    int8_t i 04; ++i)
                
    m_path.push_back(pHook >> (8) & 0xff);
            
    m_path.push_back(0xC3);

            
    Attach();
        }

        ~
    Detour()
        {
            if (
    applied)
                
    Detach();
        }

        
    void Attach()
        {
            
    DWORD dwProtect;
            
    VirtualProtect((LPVOID)m_pFunc6PAGE_EXECUTE_READWRITE, &dwProtect);
            
    memcpy((LPVOID)m_pFuncm_path.data(), 6);
            
    VirtualProtect((LPVOID)m_pFunc6dwProtect0);

            
    applied true;
        }

        
    void Detach()
        {
            
    DWORD dwProtect;
            
    VirtualProtect((LPVOID)m_pFunc6PAGE_EXECUTE_READWRITE, &dwProtect);
            
    memcpy((LPVOID)m_pFuncm_orig.data(), 6);
            
    VirtualProtect((LPVOID)m_pFunc6dwProtect0);

            
    applied false;
        }

        
    int Address()
        {
            return 
    m_pFunc;
        }
    private:
        
    bool applied false;
        
    std::vector<bytem_origm_path;
        
    int m_pFuncm_pHook;
    }; 
    [свернуть]

    Инжектор

    PHP код:
    #include <Windows.h>
    #include <filesystem>
    #include <iostream>
    #include <string>
    #include <vector>
    #include <sstream>

    std::string progargs;
    std::vector<std::stringdlls;

    inline auto Error(const charformat, ...)
    {
        
    AllocConsole();
        
    freopen("CONOUT$""w"stdout);

        
    va_list argptr;
        
    va_start(argptrformat);
        
    printf(formatargptr);
        
    va_end(argptr);
        
    printf("\r\n");

        
    getchar();
        exit(
    0);
    }

    inline auto InjectDll(LPTHREAD_START_ROUTINE loadlibraryaHANDLE hProcess, const std::stringdllname)
    {
        
    bool res false;
        if (
    auto lpAddr VirtualAllocEx(hProcessNULLdllname.size(), MEM_COMMITPAGE_READWRITE)) {
            if (
    WriteProcessMemory(hProcesslpAddrdllname.c_str(), dllname.size(), NULL)) {
                if (
    auto hThread CreateRemoteThread(hProcessFALSE0loadlibraryalpAddr0NULL)) {
                    
    res WaitForSingleObject(hThread10 1000) == WAIT_OBJECT_0;
                    
    CloseHandle(hThread);
                }
            }
            
    VirtualFreeEx(hProcesslpAddrdllname.size(), MEM_FREE);
        }
        return 
    res;
    }

    inline auto strsplit(const std::stringstrchar delim)
    {
        
    std::stringstream strstream(str);
        
    std::vector<std::stringres;
        for (
    std::string itemstd::getline(strstreamitemdelim);)
            
    res.push_back(item);
        
        return 
    res;
    }

    inline auto PutToContainer(const std::stringstrpath)
    {
        if (
    std::filesystem::exists(strpath)) {
            
    auto abspath std::filesystem::absolute(strpath);
            if (
    std::filesystem::is_directory(abspath)) {
                for (
    autofile std::filesystem::directory_iterator(abspath)) {
                    
    auto filepath file.path();
                    if (
    filepath.extension().compare(".dll") == 0)
                        
    dlls.push_back(filepath.string());
                }
            } else if(
    std::filesystem::is_regular_file(abspath)) {
                if (
    abspath.extension().compare(".dll") == 0)
                    
    dlls.push_back(abspath.string());
                else if ((
    abspath.extension().compare(".exe") == 0)) {
                    if (
    prog.empty())
                        
    prog abspath.string();
                    else
                        
    Error("%s\r\nProgram alredy assigned!"strpath);
                }
                else
                    
    Error("%s\r\nUnknown file extension. Expected \".exe\" or \".dll\""abspath.c_str());
            }else
                
    Error("%s\r\nUnknown file type."abspath.c_str());
        }
        else {
            if (
    std::filesystem::exists(strpath ".dll"))
                
    dlls.push_back(strpath ".dll");
            else if(
    std::filesystem::exists(strpath ".exe")){
                if (
    prog.empty())
                    
    prog std::filesystem::absolute(strpath ".exe").string();
                else
                    
    Error("%s\r\nProgram alredy assigned!"strpath);
            }
            else
                
    args.append(strpath).append(" ");
        }
    }

    int main(int argccharargv[])
    {
        
    auto launch std::filesystem::path(argv[0]);

        
    auto vector strsplit(launch.stem().string(), '_');
        if (
    vector.size() <= 1) {
            
    vector.clear();
            for (
    int8_t i 1argci++)
                
    vector.push_back(argv[i]);
        }
        else {
            for (
    int8_t i 1argci++)
                
    args.append(argv[i]).append(" ");
        }


        for (
    autoval vector)
            
    PutToContainer(val);

        if (
    prog.empty())
            
    Error("Program is not assigned");

        
    args.insert(0std::filesystem::absolute(prog).string().append(" "));

        
    STARTUPINFOA sInfo = { sizeof(STARTUPINFOA) };
        
    PROCESS_INFORMATION pInfo;
        
        if (!
    CreateProcessA(prog.c_str(), args.data(), NULLNULLFALSE0NULLNULL, &sInfo, &pInfo))
            
    Error("Program launch fail");

        
    auto loadlibrarya = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandleA("kernel32"), "LoadLibraryA");
        for (
    autodll dlls) {
            if (!
    InjectDll(loadlibraryapInfo.hProcessdll))
                
    Error("%s\r\nInjection fail."dll.c_str());
        }

        
    WaitForSingleObject(pInfo.hProcessINFINITE);
        
    CloseHandle(pInfo.hProcess);
        
    CloseHandle(pInfo.hThread);

        return 
    0;

    [свернуть]

    https://www.virustotal.com/gui/file/...54fb/detection
    https://www.virustotal.com/gui/file/...8823/detection
    [свернуть]



    зы.: Сделал перекат в всстудио, теперь без громоздких рантаймов. Ахк на очереди.
    Последний раз редактировалось Толя фитоняшка; 12.04.2019 в 18:10.

  2. #2
    Активист Аватар для FFAPvP
    Регистрация
    01.10.2018
    Сообщений
    54
    Поблагодарил(а)
    7
    Получено благодарностей: 5 (сообщений: 5).
    Репутация: 5
    Сыровато

  3. #3
    Заблокирован
    Регистрация
    14.12.2018
    Адрес
    Кровать твоей мамы
    Сообщений
    244
    Поблагодарил(а)
    44
    Получено благодарностей: 126 (сообщений: 93).
    Репутация: 126
    Конкретней

  4. #4
    Активист Аватар для FFAPvP
    Регистрация
    01.10.2018
    Сообщений
    54
    Поблагодарил(а)
    7
    Получено благодарностей: 5 (сообщений: 5).
    Репутация: 5
    Цитата Сообщение от Ricardozx Посмотреть сообщение
    Конкретней
    Ну что мешает вписать Никнейм в автозамену файлов в Saved_variables и копировать их в новую папку? Чем ставить этот костыль

  5. #5
    Заблокирован
    Регистрация
    14.12.2018
    Адрес
    Кровать твоей мамы
    Сообщений
    244
    Поблагодарил(а)
    44
    Получено благодарностей: 126 (сообщений: 93).
    Репутация: 126
    Цитата Сообщение от FFAPvP Посмотреть сообщение
    Ну что мешает вписать Никнейм в автозамену файлов в Saved_variables и копировать их в новую папку? Чем ставить этот костыль
    1. Это еще больший костыль.
    2. Каждый аккаунт будет дублировать кучу файлов.
    3. Если на второстепенном аккаунте поменять настройки аддонов, они не перенесутся на основной.

    - - - Updated - - -

    Если конечно не копировать заместо файлов симлинки на них, но тогда подводные могут всплыть, при этом масштабность п.1 удваивается

  6. #6
    Старожил
    Регистрация
    17.06.2018
    Сообщений
    259
    Поблагодарил(а)
    6
    Получено благодарностей: 148 (сообщений: 106).
    Репутация: 148
    можно было бы просто без инжекта-хренжекта, батник сделать, в котором перебор всех акков, всех серверов, всех чаров, создание общей с последующей заменой ею, и в конце открытие wow.exe. но это тупо забивание кеша не нужной инфой, проще вручную нужное скопипастить.
    крч изначально бред

  7. #7
    Заблокирован
    Регистрация
    14.12.2018
    Адрес
    Кровать твоей мамы
    Сообщений
    244
    Поблагодарил(а)
    44
    Получено благодарностей: 126 (сообщений: 93).
    Репутация: 126
    Цитата Сообщение от Ururu Посмотреть сообщение
    можно было бы просто без инжекта-хренжекта, батник сделать, в котором перебор всех акков, всех серверов, всех чаров, создание общей с последующей заменой ею, и в конце открытие wow.exe. но это тупо забивание кеша не нужной инфой, проще вручную нужное скопипастить.
    крч изначально бред
    Тщь эксперт, вы вообще хотя бы знаете сколько ваш батник на это примерно затратит инструкций? Сколько сколько? Больше 10к? Прискорбно.. У моего решения на это их уходит не больше сотни, конструктор детура не учитываем ибо асинхронно создается, хотя даже и этот самый жирный кусок кода выполнится быстрее чем у тебя батник запустится. За кеш улыбнулся, его потенциал в подобных процедурах которые исполняются раз в пол часа даже не задействуется, откуда тебе об этом знать, слово выучил и в бой))). Херню пишешь в общем, это самый оптимальный и быстрый вариант.
    Последний раз редактировалось Толя фитоняшка; 12.04.2019 в 23:32.

  8. #8
    Старожил
    Регистрация
    17.06.2018
    Сообщений
    259
    Поблагодарил(а)
    6
    Получено благодарностей: 148 (сообщений: 106).
    Репутация: 148
    Цитата Сообщение от Ricardozx Посмотреть сообщение
    Тщь эксперт, вы вообще хотя бы знаете сколько ваш батник на это примерно затратит инструкций? Сколько сколько? Больше 10к? Прискорбно.. У моего решения на это их уходит не больше сотни, конструктор детура не учитываем ибо асинхронно создается, хотя даже и этот самый жирный кусок кода выполнится быстрее чем у тебя батник запустится. За кеш улыбнулся, его потенциал в подобных процедурах которые исполняются раз в пол часа даже не задействуется, откуда тебе об этом знать, слово выучил и в бой))). Херню пишешь в общем, это самый оптимальный и быстрый вариант.
    важно то, что батник это не читерство. во вторых, в нем можно вбить только нужное. у меня например больше 500 чаров, но достаточно оставить только 10, на каждый класс или только 3, хила, дд и танка. также можно переносить не все подряд, а только нужные настройки и это будет намного быстрее твоего. но суть совсем не в этом, а том что это можно сделать вручную когда необходимо.

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

  9. #9
    Заблокирован
    Регистрация
    14.12.2018
    Адрес
    Кровать твоей мамы
    Сообщений
    244
    Поблагодарил(а)
    44
    Получено благодарностей: 126 (сообщений: 93).
    Репутация: 126
    Цитата Сообщение от Ururu Посмотреть сообщение
    важно то, что батник это не читерство
    Пчела против мёда?

    Цитата Сообщение от Ururu Посмотреть сообщение
    у меня например больше 500 чаров, но достаточно оставить только 10, на каждый класс или только 3, хила, дд и танка. также можно переносить не все подряд, а только нужные настройки и это будет намного быстрее твоего. но суть совсем не в этом, а том что это можно сделать вручную когда необходимо.
    Для этого и придумали профили.
    Быстрее скопировать ~50 файлов 500 раз нежели изменить 1 переменную в клиенте что б он на нативном уровне писал/читал эти файлы сразу в единый пул? Может я действительно чего то не понимаю?
    Последний раз редактировалось Толя фитоняшка; 13.04.2019 в 04:05.

  10. #10
    Старожил
    Регистрация
    17.06.2018
    Сообщений
    259
    Поблагодарил(а)
    6
    Получено благодарностей: 148 (сообщений: 106).
    Репутация: 148
    Цитата Сообщение от Ricardozx Посмотреть сообщение
    Для этого и придумали профили.
    Быстрее скопировать ~50 файлов 500 раз нежели изменить 1 переменную в клиенте что б он на нативном уровне писал/читал эти файлы сразу в единый пул? Может я действительно чего то не понимаю?
    разницы нет, быстрее это или дольше. если уж ощутимо долго будет, можно сначала запускать клиент, а потом менять текст в wtf файлах.
    во вторых, я не знаю как у тебя это работает, но я уверен что сменой одной переменной нельзя сделать нормальный менеджер профилей.
    Последний раз редактировалось Ururu; 13.04.2019 в 09:44.

  11. #11
    Старожил
    Регистрация
    21.07.2013
    Сообщений
    158
    Поблагодарил(а)
    18
    Получено благодарностей: 55 (сообщений: 27).
    Репутация: 55
    А можно просто в папке wow/WTF/Account удалить все созданные игрой папки отдельных аккаунтов кроме одного, и создать ссылки с теми же названиями внутрь единственного оставшегося, внутрь которого игра сама станет складывать все настройки со всех аккаунтов...

  12. #12
    Заблокирован
    Регистрация
    14.12.2018
    Адрес
    Кровать твоей мамы
    Сообщений
    244
    Поблагодарил(а)
    44
    Получено благодарностей: 126 (сообщений: 93).
    Репутация: 126
    Цитата Сообщение от Ururu Посмотреть сообщение
    это будет намного быстрее твоего.
    Цитата Сообщение от Ururu Посмотреть сообщение
    разницы нет, быстрее это или дольше.
    ...

    Цитата Сообщение от Ururu Посмотреть сообщение
    можно сначала запускать клиент, а потом менять текст в wtf файлах
    Можно но если ты залогинишься быстрее чем у тебя 50 файлов 500к раз скопируются(что неизбежно, 25к копий карл..) есть вероятность что настройки не успеют перенестсь на нужный аккаунт. А если ты захочешь перезайти на другой акк, нужно будет перезапускать клиент.

    Цитата Сообщение от Ururu Посмотреть сообщение
    я не знаю как у тебя это работает
    Специально что б человек ничего не смыслящий в программировании мог хотя бы примерно понимать как это работает в исходнике есть комментарии.

    Цитата Сообщение от Ururu Посмотреть сообщение
    менеджер профилей
    ...

    Цитата Сообщение от Ururu Посмотреть сообщение
    но я уверен что сменой одной переменной нельзя сделать нормальный менеджер профилей.
    "мне кажеца оно будет плохо работать"

    - - - Updated - - -

    Цитата Сообщение от Zuess Посмотреть сообщение
    А можно просто в папке wow/WTF/Account удалить все созданные игрой папки отдельных аккаунтов кроме одного, и создать ссылки с теми же названиями внутрь единственного оставшегося, внутрь которого игра сама станет складывать все настройки со всех аккаунтов...
    А если сделать что б клиент писал сразу в единую директорию без симлинков вообще пэрсик.
    Последний раз редактировалось Толя фитоняшка; 13.04.2019 в 11:37.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. [Paladin] Kizz - "The shared souls" (PvP Movie)
    от Kizz в разделе Корзина
    Ответов: 191
    Последнее сообщение: 07.03.2015, 19:08

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •