![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]() ![]()
Сообщение
#1
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20596 раз ![]() |
Эта тема предназначена для небольших модов, не требующих оформления отдельной темы.
Все обсуждения - в соседней теме. При выкладке указывайте:
Замена воговского таймера для Эры Всегда убивали воговские таймеры (которые TM, не TL). Их мало (сто, из них изрядная часть зарезервирована), они перегружены и вообще мастдай. В дллках оно еще более усугубляется - совершенно не хочется делать лишний хэндл для инициализации таймера, долбаться с его резервированием etc etc.. Поэтому для удобства написания дллок я набросал простенькую библиотеку, которая хукает RunTimer и посылает сообщение плагинам и ERM'у. Требует Бараторчевский патчер, ибо он трушный. Плагин: timerevent.era Проект: eratimer_code.rar Интерфейс: Простой как топор. Для ерм: функция !?FU4074700, в x1 - номер игрока (0..7), в x2 - день (1,2,3,4,5,6,7,8..) Для эры: событие OnGlobalTimer с двумя аналогичными параметрами. См. пример ниже. Повторю еще раз, требует patcher_x86.dll в корне папки с героями!! Пример (Си) Код void __stdcall TimerTest (PEvent e) { char buf[128]; int i = *(int*)(e->Data); sprintf(buf,"IF:L^%i %i^;",*(int*)(e->Data), *(1+(int*)(e->Data))); ExecErmCmd(buf); } .. RegisterHandler(TimerTest,"OnGlobalTimer"); Код: <div class="sp-wrap"><div class="sp-body" title="Код"> Код #include <windows.h> </div></div>#include <stdio.h> #include "....includeera.h" #include "....includeheroes.h" #include "....includepatcher_x86_commented.hpp" Patcher * globalPatcher; PatcherInstance *patcher; int __cdecl OnAnyTimer(HiHook* h, int owner) { ErmX[1]=owner; ErmX[2]=CALL_0(int, __cdecl ,0x7103D2); FireErmEvent(4074700); int param[2] = {owner,CALL_0(int, __cdecl ,0x7103D2)}; FireEvent("OnGlobalTimer",(void*)param,8); return EXEC_DEFAULT; } BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { if (ul_reason_for_call == DLL_PROCESS_ATTACH) { globalPatcher = GetPatcher(); patcher = globalPatcher->CreateInstance("timerwrapper"); ConnectEra(); patcher->WriteHiHook(0x74DC74, SPLICE_, EXTENDED_, CDECL_, (void*)OnAnyTimer); } return TRUE; } Просьба здесь особо не обсуждать. Мне куда более доставляет складывать добро в чистую тему. Спасибо сказали: |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 16 June 2025 - 18:50 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|