HLFX.Ru Forum Страницы (2): [1] 2 »
Показать все 18 сообщений этой темы на одной странице

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:

Talking Работа функции

В общем у меня тут такая проблемка, есть функция

C++ Source Code:
1
//Event Delete Monster
2
void EventClearMonsters(int Event,int Count)
3
{
4
  gObjDelMob = (void (__cdecl *)(int))0x004D9A10;
5
  int n=0;
6
  int Map=0;
7
  for(int i=0;i<Count;i++)
8
  {
9
    switch(Event)
10
    {
11
    case 1:
12
      {
13
        n = RabbitEvent.MobsID[i];
14
        //				Map = RabbitEvent.MobsMap[i];
15
      }break;
16
    }
17
    if(n!=0)
18
    {
19
      _asm
20
      {
21
        MOV ECX, n;
22
        IMUL ECX, ECX, 0x1968;
23
        XOR EDX,EDX;
24
        MOV DL, BYTE PTR DS:[ECX + 0x00660F185];
25
        CMP EDX, Map;
26
        JNZ end;
27
        MOV EAX, n;
28
        PUSH EAX;
29
        call gObjDelMob;
30
      end:
31
      }
32
      switch(Event)
33
      {
34
      case 1:
35
        {
36
          //					RabbitEvent.MobsID[i] = 0;
37
          //					RabbitEvent.MobsMap[i] = 0;
38
        }break;
39
      }
40
    }
41
  }
42
}


Так вот, эта функция очень загадочная О_о
Всё дело в том, что ещё вчера она работала - О.К.
Сегодня скомпилил заново дллку, и он мне выдаёт - "Run-Time Check Failure #0 - The value of ESP was not properly
saved across a function call... ну и дальше по тексту", но функция в принципе выполняеться, только если кнопачку на сообщении нажать приложение виснет, вобщем, что в функции такого изменилось за НОЧЬ? =)))

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.


Отправлено XaeroX 09-05-2009 в 05:36:

Цитата:
ToMMuK писал:
Так вот, эта функция очень загадочная

Подтверждаю. Функция очень загадочная.

__________________

xaerox on Vivino


Отправлено Government-Man 09-05-2009 в 06:10:

Цитата:
ToMMuK писал:
gObjDelMob = (void (__cdecl *)(int))0x004D9A10;


Что-то мне подсказывает, что это - корень всех зол...


Отправлено XaeroX 09-05-2009 в 06:11:

Цитата:
ToMMuK писал:
call gObjDelMob;

Кстати да.

__________________

xaerox on Vivino


Отправлено ToMMuK 09-05-2009 в 09:03:

Да я знаю что если убрать этот Call то всё окей, только без него вся функция неимеет смысла... =)

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.


Отправлено XaeroX 09-05-2009 в 09:23:

А в чем смысл этого 0x004D9A10?

__________________

xaerox on Vivino


Отправлено ToMMuK 09-05-2009 в 09:29:

Ну это оффсет который вызывает функцию( void gObjDel(int aIndex) ) из Гэймсервера куда эта дллка прикреплена))

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.


Отправлено XaeroX 09-05-2009 в 09:38:

Оффсет каждый раз разный. Его надо не в коде прописывать, а каждый раз заново узнавать.

__________________

xaerox on Vivino


Отправлено ToMMuK 09-05-2009 в 09:41:

C++ Source Code:
1
//Other defines
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:

Ты трейнер пишешь, что ли?

__________________

xaerox on Vivino


Отправлено 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:
1
_asm
2
{
3
  MOV ECX, n;
4
  IMUL ECX, ECX, 0x1968;
5
  XOR EDX,EDX;
6
  MOV DL, BYTE PTR DS:[ECX+0x0660F185];
7
  CMP EDX, Map;
8
  JNZ 0x4D9A10;
9
  //				MOV EAX, n;
10
  //				PUSH EAX;
11
  call gObjDelM;
12
end:
13
}

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.


Отправлено Дядя Миша 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.

__________________

xaerox on Vivino


Отправлено ToMMuK 14-05-2009 в 18:28:

Ну так самое странное что если убрать вызов gObjDelM то ошибка всё равно вылазит)

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.


Отправлено XaeroX 14-05-2009 в 19:27:

а если PUSH EAX; убрать?

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 14:14. Страницы (2): [1] 2 »
Показать все 18 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024