HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Работа функции (https://hlfx.ru/forum/showthread.php?threadid=1807)
Отправлено ToMMuK 08-05-2009 в 21:37:
Работа функции
В общем у меня тут такая проблемка, есть функция
C++ Source Code:
2 | void EventClearMonsters(int Event,int Count) |
4 | gObjDelMob = (void (__cdecl *)(int))0x004D9A10; |
7 | for(int i=0;i<Count;i++) |
13 | n = RabbitEvent.MobsID[i]; |
14 | // Map = RabbitEvent.MobsMap[i]; |
22 | IMUL ECX, ECX, 0x1968; |
24 | MOV DL, BYTE PTR DS:[ECX + 0x00660F185]; |
36 | // RabbitEvent.MobsID[i] = 0; |
37 | // RabbitEvent.MobsMap[i] = 0; |
Так вот, эта функция очень загадочная О_о
Всё дело в том, что ещё вчера она работала - О.К.
Сегодня скомпилил заново дллку, и он мне выдаёт - "Run-Time Check Failure #0 - The value of ESP was not properly
saved across a function call... ну и дальше по тексту", но функция в принципе выполняеться, только если кнопачку на сообщении нажать приложение виснет, вобщем, что в функции такого изменилось за НОЧЬ? =)))__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено XaeroX 09-05-2009 в 05:36:
Цитата:
ToMMuK писал:
Так вот, эта функция очень загадочная
Подтверждаю. Функция очень загадочная.__________________
Отправлено Government-Man 09-05-2009 в 06:10:
Цитата:
ToMMuK писал:
gObjDelMob = (void (__cdecl *)(int))0x004D9A10;
Что-то мне подсказывает, что это - корень всех зол...
Отправлено XaeroX 09-05-2009 в 06:11:
Цитата:
ToMMuK писал:
call gObjDelMob;
Кстати да.__________________
Отправлено ToMMuK 09-05-2009 в 09:03:
Да я знаю что если убрать этот Call то всё окей, только без него вся функция неимеет смысла... =)
__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено XaeroX 09-05-2009 в 09:23:
А в чем смысл этого 0x004D9A10?
__________________
Отправлено ToMMuK 09-05-2009 в 09:29:
Ну это оффсет который вызывает функцию( void gObjDel(int aIndex) ) из Гэймсервера куда эта дллка прикреплена))
__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено XaeroX 09-05-2009 в 09:38:
Оффсет каждый раз разный. Его надо не в коде прописывать, а каждый раз заново узнавать.
__________________
Отправлено ToMMuK 09-05-2009 в 09:41:
C++ Source Code:
2 | #define gObjTeleport ((void(*)(int, int, int, int))0x00402CA7) |
3 | #define gObjSetMonster ((void(*)(int,int)) 0x00405CA9) |
4 | #define gObjAddMonster ((int(*)(int)) 0x00404589) |
5 | #define GetTopHitUser ((DWORD(*)(DWORD)) 0x00403BA7) |
6 | #define LogAddFunc ((void(*)(char* Text,int Type)) 0x004A3D70) |
7 | #define LogAddFuncColor ((void(*) (int, char*)) 0x004A3E60) |
8 | #define GCServerMsgStringSend ((void(*)(char* Text,DWORD PlayerID,int Type)) 0x00432db0) |
9 | #define NPCTalk ((void(*)(DWORD dwNpcID,char* Text,DWORD PlayerID)) 0x00402FB3) |
10 | #define GCMoneySend ((void(*)(DWORD,int)) 0x004040DE) |
11 | #define CGLevelUpPointAdd ((int(*)(BYTE *Arg1,DWORD PlayerID)) 0x00403D32) |
12 | #define ItemSerialCreateSend ((int(*)(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD)) 0x004036F7) |
13 | #define GameMonsterAllCloseAndReload ((void(*)()) 0x00522690) |
14 | #define gObjViewportListProtocolCreate ((void(*)(OBJECTSTRUCT*)) 0x004F7020) |
15 | #define pReadCommonServerInfo ((void(*)()) 0x004058CB) |
16 | #define pShopDataLoad ((void(*)()) 0x00402FEA) |
17 | #define ChaosBoxInit ((void(*) (int)) 0x004044E4) |
18 | #define GCUserChaosBoxSend ((void(*) (int, int)) 0x004050AB) |
19 | #define gObjInventoryDeleteItem ((void(*)(int,int)) 0x40209F) |
20 | #define GCInventoryItemDeleteSend ((void(*)(int,int,unsigned char)) 0x4036F2) |
21 | #define GCLevelUpMsgSend ((void(*)(int, unsigned char)) 0x004060C3) |
22 | #define GCSendQuestPrize ((int(*)(int, int, int)) 0x00402D7E) // F1X: |
23 | #define gObjGetItemCountInIventory ((int(*)(int,WORD))0x4024fa) |
24 | #define gObjDel ((void (*)(int)) 0x004D9A10) |
25 | #define gObjCalCharacter ((void(*)(int)) 0x00402B08) |
26 | #define ObjGameClose ((int(*)(int)) 0x004D93F0) |
27 | #define GCPkLevelSend ((void(*)(int,unsigned char)) 0x00434d70) |
Но эти то работают окей, я про оффсеты которые в ГеймСервере(у меня нету его исходников, и оффсеты там всегда одни и теже)__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено XaeroX 09-05-2009 в 09:45:
Ты трейнер пишешь, что ли?
__________________
Отправлено ToMMuK 09-05-2009 в 12:21:
Нееет) добавляю новые функции в ГС, комманды и т.д. и т.п.)
Добавлено 09-05-2009 в 13:53:
Вот только если задефайнить её вот так -
C++ Source Code:
#define gObjDelM (void(*)(int))0x4D9A10; |
То компилятор жалуеться на - Цитата:
error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в 'первый операнд'; обнаружено '('
Добавлено 09-05-2009 в 15:21:
Самое странной что если закоментить пару строчек) то всё вроде как работает
C++ Source Code:
6 | MOV DL, BYTE PTR DS:[ECX+0x0660F185]; |

__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено Дядя Миша 14-05-2009 в 14:30:
ToMMuK поделись откуда ты этот оффсет взял вообще?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 14-05-2009 в 16:11:
Кстати. "The value of ESP was not properly saved across a function call" - это типичная ошибка вызова функции с неправильной конвенцией. Т.е. неправильный код пролога/эпилога. В частности, наверняка функция gObjDelM делает в конце ret, и это-то и портит ESP.
__________________
Отправлено ToMMuK 14-05-2009 в 18:28:
Ну так самое странное что если убрать вызов gObjDelM то ошибка всё равно вылазит)
__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено XaeroX 14-05-2009 в 19:27:
а если PUSH EAX; убрать?
__________________
Отправлено ToMMuK 14-05-2009 в 19:28:
C++ Source Code:
Только если эти 2 строчки убрать всё вроде окей)__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено XaeroX 14-05-2009 в 19:32:
Так у тебя тогда не будет передаваться аргумент функции, не?
__________________
Отправлено ToMMuK 14-05-2009 в 19:34:
Ну вот что самое странное, эта функция должна убирать мобов, и саааааааааамое странное что свою функцию она в принципе и выполняет 
__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.