![](https://koreanrandom.com/forum/uploads/set_resources_6/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
Pavel3333
-
Posts
3,713 -
Joined
-
Last visited
-
Days Won
35
Posts posted by Pavel3333
-
-
21 минуту назад, HellQwer сказал:
Эт да, не с кем особо, надо то ли с вотспика мультистарт качнуть, то ли в симс к кому зайти, а у меня все руки не доходят)
А у меня всё руки не доходят до дивана. Прилечь, отдохнуть. Уже полтора месяца пилю 4.0. Она обещает быть быстрой
и дерзкой, но трудов там вбухано ого-го... -
1 минуту назад, HellQwer сказал:
Опасные проезды не появились? Сёдни опять утонул на заполярье))
Надо было тренить :)
-
1
-
-
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, прошу помощи.
-
Edited by Pavel3333
@DWG отъе*ись уже от меня, мой мод - чё хочу то и делаю.
-
3
-
2
-
-
@Mixaill работает корректно
-
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.
-
Та же ошибка: / 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.
-
26 минут назад, SkepticalFox сказал:
попробуй использовать Py_INCREF
так-то вроде она уже инкрементирована после создания PyUnicodeString, сейчас гляну сорцы.
27 минут назад, SkepticalFox сказал:а вообще, если работает - не трогай)
золотое правило любого радиотехника и вообще по жизни!
но устранять краши можно только путем экспериментов и длительной отладки :)
-
Прога классная, помог таким образом одному юзверу. У него вылетала игра на Эль-Халлуфе, снесение модов не помогло. WMCleaner проверила клиент, после чего он обновился сам и проблемы пропали :)
-
1
-
-
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);
Есть предложения?
-
Edited by Pavel3333
deldel
-
1
-
-
32 минуты назад, SkepticalFox сказал:
а вообще глупости какие-то
конкретно?
32 минуты назад, SkepticalFox сказал:вместо поиска по строке использовать поиск по хешу внутри двоичного дерева...
подробнее?
-
@Mixaill, будут ли проводиться изменения в XFW Native?
-
4 часа назад, GPCracker сказал:
Если продолжить написанное ранее, оптимизация по скорости работы это в первую очередь оптимизация алгоритма. Алгоритма, Паша!
У меня хорошо оптимизированный говнокод, я даже следую PEP8!
-
1
-
-
@GPCracker тоже читал, но не стоит оно того :)
а вот оптимизация Питона - это настоящее кредо...
@Scharfhobel Совместными усилиями дай Бог и XVM станет грузиться быстрее ;)
-
1
-
-
5 минут назад, Mixaill сказал:
пропишу тут явно
тем самым Вы зададите повышенный приоритет того, что функция будет inline'овая, но инлайнить ее или нет - решит компилятор.
-
@StranikS_Scan нет, наоборот, прописано следующее:
typedef unsigned char uint8_t;
самый быстрый тип байта - uint_fast8_t, тоже определен как unsigned char:
typedef unsigned char uint_fast8_t;
Подробнее - в stdint.h (хедер, использующий его - iostream)
-
@Mixaill спасибо!
-
2 минуты назад, StranikS_Scan сказал:
но мне кажется если если сравниваться будут не Char, а Byte, то будет быстрее
а что char, что byte - это одно и то же. Самый быстрый тип байта в Си - это ЕМНИП unsigned char, он же uint8_t
-
Edited by Pavel3333
@Mixaill кэш можно реализовать, как понимаю, в виде "сигнатура - позиция, по которой она последний раз была найдена".
При дальнейших запусках клиента смотреть в кэш. Если не совпало - надо делать по старинке.
-
@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), в ней байт за байтом считываются блоки данных и сверяются по маске.
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. Не нашли - ищем во ВСЕЙ памяти процесса.
-
Edited by Pavel3333
Есть ли эквивалент try/except в Си-питон коде, когда нужно отловить какое-либо исключение?
К примеру, вот такое:
try: a = b.c except AttributeError: a = None
как можно перевести в Си-питон код? (про код ошибки PyObject_GetAttrString() знаю, но интересует именно си-питон код try/except)
-
Edited by Pavel33336 минут назад, GPCracker сказал:
вслепую
Не совсем вслепую, при совпадении хэшей exe'шника танковне совпадает - пофиг, пляшем от регулярного поиска сигнатур по шаблону--------------
Надо найти точку входа главной питоновской функции и уже от нее считать смещения. Или, если они все располагаются непоследовательно, как предложил @GPCracker, запоминать смещения в памяти танков и искать сигну по шаблону уже в области этих смещений
-
Edited by Mixaill
Клиент с XFW Native грузится в 3 раза дольше, чем без него. По предложению @GPCracker, это связано с регулярным поиском сигнатур функций питона в памяти.
Есть предложение от @GPCracker-
Цитатаа нельзя ли эти точки закешировать в пределах неизменности контрольной суммы exe клиента и значимых dll?
То есть при каждом патче пройтись по exe'шнику танков и записать смещения функций питона. Мне кажется, это очень разумно и будет намного быстрее по времени загрузки, чем каждый раз сканировать память клиента на предмет нахождения сигнатур функций.
-
2
-
[1.3.0.1] Мод "Траектория заезда танка". 349 траекторий на подсадки без падения FPS
in Mods and Software
Posted
@D_MAN_1987 много изменений. Например, более быстрая загрузка в бой и большая производительность. Меньшее использование трафика. Исправлены переводы. Новая система оплаты, более щадящая. Это лишь малая часть изменений.