#76 20-02-2011 15:59

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: Вопрос по памяти

Подскажите, что именно делает данный метод

0x4B8DD0 CMatrix::Attach((RwMatrix *, bool))

И можно ли с его помощью сцепить два обьекта?


Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#77 20-02-2011 20:09

CraZZZy-GameRRR
From: Москва
Registered: 11-08-2009
Posts: 97
Website

Re: Вопрос по памяти

Den_spb, большое спасибо!

Offline

#78 21-02-2011 01:40

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 937
Website

Re: Вопрос по памяти

Незачто. Я немного стормозил: ID-номер модели - это ведь и есть model index. Так что если в 0@ записан ID-номер, то код выглядит так:

0@ *= 4
0@ += 0xA9B0C8
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 //CModel
0@ += 0x4A
0A8D: 0@ = read_memory 0@ size 2 virtual_protect 0 //handlingIndex

Offline

#79 21-02-2011 16:19

Seemann
Registered: 07-08-2006
Posts: 2,080

Re: Вопрос по памяти

Den_spb wrote:

Незачто. Я немного стормозил: ID-номер модели - это ведь и есть model index. Так что если в 0@ записан ID-номер, то код выглядит так:

0@ *= 4
0@ += 0xA9B0C8
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 //CModel
0@ += 0x4A
0A8D: 0@ = read_memory 0@ size 2 virtual_protect 0 //handlingIndex
0@ += 83418
0A8E: 0@ = &0(0@,1i) + 0x4A
0A8D: 0@ = read_memory 0@ size 2 virtual_protect 0 //handlingIndex

Offline

#80 22-02-2011 23:09

CraZZZy-GameRRR
From: Москва
Registered: 11-08-2009
Posts: 97
Website

Re: Вопрос по памяти

И тебе, Seemann, тоже спасибо!

Offline

#81 01-03-2011 21:53

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Вопрос по памяти

Приветствую всех, есть тут такой нубский вопрос…
Есть код:
       

HWND hWnd = FindWindow( 0, L"GTA: San Andreas" );
	if( !hWnd )
		cout << "Окно не найдено.\n";
	else
		cout << "Окно найдено.\n";
	
	DWORD pid;
	
	if( !GetWindowThreadProcessId( hWnd, &pid ) ) 
		cout << "Процесс не найден.\n";
	else 
		cout << "Процесс найден, ID: " << pid << endl;
	
	DWORD money;

	HANDLE hProc = OpenProcess( PROCESS_ALL_ACCESS, 0, pid );
	if( !ReadProcessMemory( hProc, (LPCVOID) 0xB7CE50, &money, 4, 0 ) )
	        cout << "Ошибка.\n";
	else 
                cout << money << endl;

Окно находит нормально, ид процесса совпадает. Но на чтении адреса выдает ошибку. Если проверку убрать, то по этому адресу находит какую-то хренотень. Подскажите, что неправильно, наставьте на путь истинный rolleyes

Offline

#82 09-03-2011 23:38

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Вопрос по памяти

0AE3: $object = random_object_near_point 0@ 1@ 2@ in_radius 10.0 find_next 1 //IF and SET
Как представить этот опкод в виде последовательности операций с игровой памятью? Я так понимаю сначала пробегаемся по пулу объектов, что-то вроде этого:

  :get_obj
   0A8D: 27@ = read_memory 0xB7449C size 4 virtual_protect 0
   000A: 27@ += 0x4
   0A8D: 27@ = read_memory 27@ size 4 virtual_protect 0
   for 28@ = 0 to 89344 step 0x100
       0A8D: 26@ = read_memory 27@ size 1 virtual_protect 0
       000A: 27@ += 0x1
       if and
       0029:   26@ >= 0x00 
       001B:   0x80 > 26@
       then 
           005A: 26@ += 28@ // (int)
           if
           03CA: (check) object 26@ exists
           then                  
           end 
       end        
   end
   return

потом проверяем, находится ли этот объект в нужных координатах и и записываем его хэндл в $object?

Offline

#83 10-03-2011 05:48

Alien
Registered: 12-10-2008
Posts: 564

Re: Вопрос по памяти

Offline

#84 10-03-2011 08:12

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Вопрос по памяти

@Alien - Эту тему я видел, просто думал может есть другой способ, а то 20 локальных переменных ради поиска 1 объекта это перебор. Координаты и find_next в принципе не важны.

Offline

#85 10-03-2011 21:16

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Вопрос по памяти

Вобщем проверил - короткая версия интерцептора у меня получилась такая:

{$CLEO}
0000:

while true
wait 0
gosub @get_obj
end
        

   :get_obj
   0A8D: 27@ = read_memory 0xB7449C size 4 virtual_protect 0
   000A: 27@ += 0x4
   0A8D: 27@ = read_memory 27@ size 4 virtual_protect 0
   for 28@ = 0 to 89344 step 0x100
       0A8D: 26@ = read_memory 27@ size 1 virtual_protect 0
       000A: 27@ += 0x1
       if and
       0029:   26@ >= 0x00 
       001B:   0x80 > 26@
       then 
           005A: 26@ += 28@ // (int)
           if
           03CA: (check) object 26@ exists
           then   
                Marker.Disable($m2)
                Marker.CreateAboveObject($m2, 26@)
                wait 1000
                Object.Destroy(26@)                
           end 
       end        
   end
   return

Делает всё тоже самое, что и в выше приведённой теме, но без учёта координат и find_next(если я правильно понял).
Как здесь правильно реализовать опциональный find_next, чтоб код соответствовал оригиналу?

Last edited by Sergey81 (10-03-2011 22:36)

Offline

#86 13-03-2011 17:17

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 551
Website

Re: Вопрос по памяти

Кто знает подскажите, по какому адресу хранится значение усталости игрока или актера вообще, и сколько байт и в каких пределах, т.е, например, когда игрок устает бежать спринтом или плавать или на велосипеде, мне надо не то значение что хранится в "Статистика ID", а именно то, что хранится в структуре актеров, может, правда, это значение только для игрока существует?


I know everything and nothing...

Offline

#87 02-05-2011 17:56

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Вопрос по памяти

Спустя долгое время снова занялся саномоддингом, а здесь мне так и не ответили. Печально(
Решусь спросить еще раз…

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

HWND hWnd = FindWindow( 0, L"GTA: San Andreas" );
  if( !hWnd )
    cout << "Окно не найдено.\n";
  else
    cout << "Окно найдено.\n";
  
  DWORD pid;
  
  if( !GetWindowThreadProcessId( hWnd, &pid ) ) 
    cout << "Процесс не найден.\n";
  else 
    cout << "Процесс найден, ID: " << pid << endl;
  
  DWORD money;

  HANDLE hProc = OpenProcess( PROCESS_ALL_ACCESS, 0, pid );
  ReadProcessMemory( hProc, (LPCVOID) 0xB7CE50, &money, 4, 0 )
                cout << money << endl;

Last edited by Wire (02-05-2011 17:58)

Offline

#88 04-05-2011 12:54

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Вопрос по памяти

Надо каким-то образом инжектиться в сам процесс, пытался то же самое сделать (как у тебя) и не получалось нифига.

Offline

#89 04-05-2011 13:44

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Вопрос по памяти

И все бы ничего, но ведь я когда-то нашел тутор по написанию трейнера для пинбола (правда потом потерял, но восстановил, как мне кажется, полностью), и тогда все прекрасно работало…

PS если у кого-то этот тутор есть, киньте)
Ибо тот сайт как упал, так больше и не вставал.

Offline

#90 22-06-2011 17:52

Shag
Registered: 29-03-2010
Posts: 146
Website

Re: Вопрос по памяти

вопрос по сейвам и маркерам на карте.

В общем, допустим, у меня есть сейв с сохраненными метками(квадратиками) на карте. После загрузки сейва, при приближении к одной из меток, она должна удаляться. Смысл в том, что таких меток много, и они обязательно должны быть загружены из сейва. Это необходимо для моего мода, в котором можно сохраняться в любое время(как в Half Life например). Сам принцип создания/сохранения/загрузки из сейва метки уже есть, я не знаю лишь, как "прочитать" метку из памяти, проверить расстояние до игрока и т.п.
Мб есть у кого какие-нибудь мысли? Просьба не предлагать проверку на координаты, в которые я ранее ставил метку - там они случайные и вообще нужно только через память, иначе сейвы работать не будут...

Offline

#91 22-06-2011 19:06

Seemann
Registered: 07-08-2006
Posts: 2,080

Re: Вопрос по памяти

Суть проблемы не ясна

Сам принцип создания/сохранения/загрузки из сейва метки уже есть

в каком виде ты хранишь "метку" в сейве? что именно ты записываешь?

Offline

#92 22-06-2011 20:51

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Вопрос по памяти

Я тоже не вижу проблемы, но пара примеров работы с пулом маркеров у меня есть:
Для SA:

while true
wait 0
    for 10@ = 0xBA86F0 to 0xBAA248 step 0x28
     0A8D: 22@ = read_memory 10@ size 4 virtual_protect 0
     0A8E: 11@ = 10@ + 0x1C
        0A8D: 12@ = read_memory 11@ size 4 virtual_protect 0 //DWORD dwIconSize;
            if 
            12@ == 3
            then 
            0A8C: write_memory 11@ size 4 value 2 virtual_protect 0
            end    
    end   
end

Здесь мы устанавливаем всем маркерам с размером 3 второй размер.

Для VC:

{$CLEO .cs} 
0000: 
while true
wait 0
    for 10@ = 0x7D7D68 to 0x7D8D98 step 0x38  
        05E0: 12@ = read_memory 10@ size 2 virtual_protect 0 //DWORD dwIconSize;
            if 
            12@ == 3
            then 
            05DF: write_memory 10@ size 2 value 2 virtual_protect 0
            end    
    end   
end

Тоже самое.
Структура:
SA:

00000000 CMarker         struc ; (sizeof=0x28)
00000000 Color           dd ?
00000004 EntityHandle    dd ?
00000008 Pos             RwV3D ?
00000014 _Index          dw ?
00000016                 db ? ; undefined
00000017                 db ? ; undefined
00000018 _SphereRadius   dd ?
0000001C Size            dw ?
0000001E                 db ? ; undefined
0000001F                 db ? ; undefined
00000020 field_20        dd ?
00000024 Icon            db ?
00000025 _Flag           db ?
00000026 _RadarMode_or_EntityType db ?
00000027 field_27        db ?
00000028 CMarker         ends

VC:

00000000 CMarker         struc ; (sizeof=0x38)
00000000 field_0         dd ?
00000004 type            dd ?
00000008 entityHandle    dd ?
0000000C pos             RwV3d ?
00000018 field_18        RwV3d ?
00000024 field_24        dw ?
00000026 field_26        db ?
00000027 inUse           db ?
00000028 field_28        db ?
00000029                 db ? ; undefined
0000002A                 db ? ; undefined
0000002B                 db ? ; undefined
0000002C field_2C        dd ?
00000030 Size            dw ?
00000032 field_32        dw ?
00000034 iconID          dw ?
00000036 __padding       dw ?
00000038 CMarker         ends

Last edited by Sergey81 (22-06-2011 20:54)

Offline

#93 23-06-2011 15:38

Shag
Registered: 29-03-2010
Posts: 146
Website

Re: Вопрос по памяти

короче мне нужно "идентифицировать" метку на карте, чтобы с ней можно было работать - узнать расстояние до нее, удалить ее, передвинуть и т.п. Т.е. при загрузке сейва у меня нет нигде данных об этой метке(в scm), но она на карте есть.

Мне это нужно на СА, но если есть инфа и насчет ВС - буду очень признателен(тогда реализую еще одну идейку)

Last edited by Shag (23-06-2011 15:43)

Offline

#94 23-06-2011 18:08

Shag
Registered: 29-03-2010
Posts: 146
Website

Re: Вопрос по памяти

А, всё - разобрался; Sergey81 - спасибо огромное, то, что нужно.

Извиняюсь за даблпостинг

Offline

#95 29-06-2011 16:59

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: Вопрос по памяти

Пытаюсь создать проекцию. Игра вылетает (если убрать вызов процедуры, то не вылетает).

__asm
 {
     mov eax, 0xB6F5F0
     mov eax, [eax]
     add eax, 0x14 // Matrix
     mov eax, [eax]
     add eax, 0x30 // Vector
     push 0
     push 0
     push 1.0
     push 0
     push 1000.0
     push 255
     push 0
     push 0
     push 255
     push 3.0
     push 0
     push 0
     push 3.0
     push eax // Vector
     mov eax, 0xC403F4
     push eax // RwTexture
     push 2
     mov eax, 0x707390
     call eax
     add esp, 0x40
 }

В чём может быть проблема?
Edit:
Проблему решил.

mov eax, [0xC403F4]
push eax

lol

Last edited by DK22Pac (30-06-2011 10:13)


Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#96 30-06-2011 16:20

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Вопрос по памяти

@DK22Pac - что за проекцию? Если на подобии 3D текста то мне уже интересно!

Offline

#97 05-07-2011 20:58

Jack Daniel's
Registered: 05-07-2011
Posts: 211

Re: Вопрос по памяти

Я понимаю, что вопрос, который я задам, слишком прямолинеен, но он меня мучает продолжительное количество времени.
Вопрос: Существует ли такой кусок в памяти игры, который хранит в себе все координаты маркеров-целей (в сампе маркеры игроков обозначаются как "цели миссии")?
Я понимаю, что вы не занимаетесь модификациями мультиплеера и прочее, но как бы все же grin
Мультиплеер тоже интересен для модифицирования. Как раз недавно даже исходники чуть более ранней версии отрыл...

Алсо,
не примите за проходимца-нуба с 0 постами. Я перечитал ваш форум вдоль и поперек. Не говоря про изучение гташки/сампа/мта.

Last edited by Jack Daniel's (05-07-2011 21:31)

Offline

#98 06-07-2011 20:07

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Вопрос по памяти

@Jack Daniel's - может речь идёт об пуле маркеров?

Offline

#99 07-07-2011 08:53

Jack Daniel's
Registered: 05-07-2011
Posts: 211

Re: Вопрос по памяти

Сомневаюсь, что мультиплеер хранит в нем все данные. И я не нашел ничего об этом пуле (кроме структуры из базы Листенера). Придется самому копаться(

Offline

#100 07-07-2011 12:32

Seemann
Registered: 07-08-2006
Posts: 2,080

Re: Вопрос по памяти

Jack Daniel's wrote:

Я понимаю, что вопрос, который я задам, слишком прямолинеен, но он меня мучает продолжительное количество времени.
Вопрос: Существует ли такой кусок в памяти игры, который хранит в себе все координаты маркеров-целей (в сампе маркеры игроков обозначаются как "цели миссии")?

Отвечаю прямолинейно: да, такой кусок существует.

Offline

Board footer

Powered by FluxBB