Jump to content
Korean Random

Pavel3333

User
  • Posts

    3,713
  • Joined

  • Last visited

  • Days Won

    35

Posts posted by Pavel3333

  1. @D_MAN_1987 много изменений. Например, более быстрая загрузка в бой и большая производительность. Меньшее использование трафика. Исправлены переводы. Новая система оплаты, более щадящая. Это лишь малая часть изменений.

  2. 21 минуту назад, HellQwer сказал:

    Эт да, не с кем особо, надо то ли с вотспика мультистарт качнуть, то ли в симс к кому зайти, а у меня все руки не доходят)

    А у меня всё руки не доходят до дивана. Прилечь, отдохнуть. Уже полтора месяца пилю 4.0. Она обещает быть быстрой и дерзкой, но трудов там вбухано ого-го...

  3. Edited by Pavel3333

    Имеется следующий код:

    static PyObject* trj_test(PyObject *self, PyObject *args)
    {
    	Py_RETURN_NONE;
    };

    При вызове крашит клиент.

    Следующий код не крашит:

    static PyObject* trj_test(PyObject *self, PyObject *args)
    {
    	return Py_BuildValue("");
    };

    Вопрос: где логика? почему краш?

    @Mixaill, прошу помощи.

  4. Edited by Mixaill

    *** [XFW/Native] Error on loading native components. XFW Native will be unavailable.
    *** Traceback (most recent call last):
    ***   File "./src/wot_python/mod_xfw_native.py", line 115, in <module>
    *** ImportError: DLL load failed: \xcf\xf0\xee\xe8\xe7\xee\xf8\xe5\xeb \xf1\xe1\xee\xe9 \xe2 \xef\xf0\xee\xe3\xf0\xe0\xec\xec\xe5 \xe8\xed\xe8\xf6\xe8\xe0\xeb\xe8\xe7\xe0\xf6\xe8\xe8 \xe1\xe8\xe1\xeb\xe8\xee\xf2\xe5\xea\xe8 \xe4\xe8\xed\xe0\xec\xe8\xf7\xe5\xf1\xea\xee\xe9 \xea\xee\xec\xef\xee\xed\xee\xe2\xea\xe8 (DLL).
    *** [XFW] Root dir   : mods/xfw
    *** [XFW] In .wotmod : True
    *** [XFW] Loading mod: com.modxvm.xfw, v. 7.6.0.944
    *** [XFW] Loading mod: com.modxvm.xfw.native, v. 1.1.0.00041
    *** [XFW] Loading mod: com.modxvm.xfw.filewatcher, v. 7.6.0.944
    *** [XFW] Loading mod: com.modxvm.xfw.wwise, v. 7.6.0.944
    *** [WWISE/Native] was not loaded because of python27 error
    *** [XFW] Loading mod: com.modxvm.xfw.wotfix, v. 7.6.0.944
    *** [XFW] Loading mod: com.modxvm.xfw.crashfx, v. 7.6.0.944
    *** [XFW/Crashfix] No XFW.Native found. Crash fix will not be applied.

     

  5. Та же ошибка: / Same error:

     

    ***   File "./src/wot_python/mod_xfw_native.py", line 115, in <module>
    *** ImportError: DLL load failed: \xcf\xf0\xee\xe8\xe7\xee\xf8\xe5\xeb \xf1\xe1\xee\xe9 \xe2 \xef\xf0\xee\xe3\xf0\xe0\xec\xec\xe5 \xe8\xed\xe8\xf6\xe8\xe0\xeb\xe8\xe7\xe0\xf6\xe8\xe8 \xe1\xe8\xe1\xeb\xe8\xee\xf2\xe5\xea\xe8 \xe4\xe8\xed\xe0\xec\xe8\xf7\xe5\xf1\xea\xee\xe9 \xea\xee\xec\xef\xee\xed\xee\xe2\xea\xe8 (DLL).
    *** [XFW] Root dir   : mods/xfw
    *** [XFW] In .wotmod : True
    *** [XFW] Loading mod: com.modxvm.xfw, v. 7.6.1.946
    *** [XFW] Loading mod: com.modxvm.xfw.native, v. 1.0.9.00039
    *** [XFW] Loading mod: com.modxvm.xfw.filewatcher, v. 7.6.1.946
    *** [XFW] Loading mod: com.modxvm.xfw.wwise, v. 7.6.1.946
    *** [WWISE/Native] was not loaded because of python27 error
    *** [XFW] Loading mod: com.modxvm.xfw.wotfix, v. 7.6.1.946
    *** [XFW] Loading mod: com.modxvm.xfw.crashfx, v. 7.6.1.946

     

    Во время загрузки стороннего модуля, работающего со старой версией XFW, ловлю вылет. / By the time while loading third-party module I am getting crash.

  6. 26 минут назад, SkepticalFox сказал:

    попробуй использовать Py_INCREF

    так-то вроде она уже инкрементирована после создания PyUnicodeString, сейчас гляну сорцы.

     

    27 минут назад, SkepticalFox сказал:

    а вообще, если работает - не трогай)

    золотое правило любого радиотехника и вообще по жизни!

     

    но устранять краши можно только путем экспериментов и длительной отладки :)

  7. Прога классная, помог таким образом одному юзверу. У него вылетала игра на Эль-Халлуфе, снесение модов не помогло. WMCleaner проверила клиент, после чего он обновился сам и проблемы пропали :)

    • Upvote 1
  8. Edited by Pavel3333

    Сижу карпею над одним достаточно проблемным вопросом.

     

    Такой код работает:

    PyObject_CallMethodObjArgs(BigWorld, PyUnicode_FromString("delModel"), obj);

    А такой вызывает вылеты:

    PyObject* attribute = PyUnicode_FromString("delModel");
    
    if(attribute == NULL) Py_RETURN_NONE;
    
    PyObject_CallMethodObjArgs(BigWorld, attribute, obj);
    
    Py_DECREF(attribute);

    Есть предложения?

  9. 32 минуты назад, SkepticalFox сказал:

    а вообще глупости какие-то

    конкретно?

     

    32 минуты назад, SkepticalFox сказал:

    вместо поиска по строке использовать поиск по хешу внутри двоичного дерева...

    подробнее?

  10. 4 часа назад, GPCracker сказал:

    Если продолжить написанное ранее, оптимизация по скорости работы это в первую очередь оптимизация алгоритма. Алгоритма, Паша!

    У меня хорошо оптимизированный говнокод, я даже следую PEP8!

    • Upvote 1
  11. 2 минуты назад, StranikS_Scan сказал:

    но мне кажется если если сравниваться будут не Char, а Byte, то будет быстрее

    а что char, что byte - это одно и то же. Самый быстрый тип байта в Си - это ЕМНИП unsigned char, он же uint8_t

  12. Edited by Pavel3333

    @Mixaill кэш можно реализовать, как понимаю, в виде "сигнатура - позиция, по которой она последний раз была найдена".

     

    При дальнейших запусках клиента смотреть в кэш. Если не совпало - надо делать по старинке.

  13. @GPCracker @StranikS_Scan вот на примере helper.c:

    DWORD WOTPYTHON_FindFunction(DWORD startpos, DWORD endpos, DWORD* curpos, const char* pattern, const char* mask)
    {
        DWORD pos;
    
        for (pos=(*curpos); pos < endpos; pos++)
        {
            if (WOTPYTHON_DataCompare((char*)pos, pattern, mask))
            {
                (*curpos) = pos;
                return pos;
            }
        }
    
        for (pos = startpos; pos < (*curpos); pos++)
        {
            if (WOTPYTHON_DataCompare((char*)pos, pattern, mask))
            {
                (*curpos) = pos;
                return pos;
            }
        }
    
        (*curpos) = startpos;
        return 0;
    }

    То есть задается область памяти (от void* startpos до void* endpos), в ней байт за байтом считываются блоки данных и сверяются по маске.

     

     

    fix_winapi.c

    FARPROC WINAPI GetProcAddress_libpython(HMODULE hModule, LPCSTR lpProcName)
    {
        FARPROC ret = NULL;
        if(hModule==PyWin_DLLhModule)
        {
            ret = (FARPROC)WOTPYTHON_GetRealAddress(lpProcName);       
            if (ret != NULL)
            {
                return ret;
            }
        }
    
        return GetProcAddress_real(hModule, lpProcName);
    }

     

    Ищется адрес python27.lib. Не нашли - ищем во ВСЕЙ памяти процесса.

  14. Edited by Pavel3333

    Есть ли эквивалент try/except в Си-питон коде, когда нужно отловить какое-либо исключение?

     

    К примеру, вот такое:

    try:
      a = b.c
    except AttributeError:
      a = None

    как можно перевести в Си-питон код? (про код ошибки PyObject_GetAttrString() знаю, но интересует именно си-питон код try/except)

  15. Edited by Pavel3333

    6 минут назад, GPCracker сказал:

    вслепую

    Не совсем вслепую, при совпадении хэшей exe'шника танков

    не совпадает - пофиг, пляшем от регулярного поиска сигнатур по шаблону

    @sirmax, @Mixaill?

    --------------

    Надо найти точку входа главной питоновской функции и уже от нее считать смещения. Или, если они все располагаются непоследовательно, как предложил @GPCracker, запоминать смещения в памяти танков и искать сигну по шаблону уже в области этих смещений

  16. Edited by Mixaill

    Клиент с XFW Native грузится в 3 раза дольше, чем без него. По предложению @GPCracker, это связано с регулярным поиском сигнатур функций питона в памяти.

     

    Есть предложение от @GPCracker

    Цитата

    а нельзя ли эти точки закешировать в пределах неизменности контрольной суммы exe клиента и значимых dll?

     

    То есть при каждом патче пройтись по exe'шнику танков и записать смещения функций питона. Мне кажется, это очень разумно и будет намного быстрее по времени загрузки, чем каждый раз сканировать память клиента на предмет нахождения сигнатур функций.

    • Upvote 2
×
×
  • Create New...