#151 28-10-2011 21:33

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

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

@listener - помогите разобраться с параметрами для этой процедуры - data и callback

Last edited by DK22Pac (28-10-2011 21:33)


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

Offline

#152 13-11-2011 11:26

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

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

Уже сам разобрался...

Щас интересует вот что - как так выходит, что рендерные 2д-примитивы скриываются за обьектами карты? Это зависит от последовности рендеринга (т.е. они рендерятся первыми на экране)?


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

Offline

#153 15-11-2011 17:33

NIK
Registered: 15-11-2011
Posts: 4

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

люди помогите изменить количество миллисекунд в одной секунде

Offline

#154 15-11-2011 21:21

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

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

0xB7015C - [dword] Количество миллисекунд в одной игровой секунде (по умаолчанию - 1000)
0A8C: write_memory 0xB7015C size 4 value 500 virtual_protect 0

Offline

#155 17-11-2011 19:37

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

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

Может, этот вопрос уже задавался, но где в сане хранятся адреса с матрицей поворотов костей актера, и можно ли их менять?
А, и еще — по какому адресу находятся координаты и размеры боундбокса игрока?

Offline

#156 18-11-2011 03:06

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

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

@Wire - Все структуры с описаниями есть в RenderWare SDK
по смещению +0x18 в любом Entity хранится указатель либо на RpClump, либо RpAtomic.
BoundBox возвращается виртуальным методом _m24 в CEntity и всех его потомках.

Offline

#157 18-11-2011 17:55

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

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

@listener,
спасибо

Offline

#158 19-11-2011 12:44

NIK
Registered: 15-11-2011
Posts: 4

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

и еще один вопрос, как сохранить измененный exe файл в иде про

Offline

#159 19-11-2011 15:24

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

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

IDA работает не с exe, а с базой, содержащей код exe. Сохранить изменения в базе просто - нажать на значок Дискета.
А для редактирования exe надо использовать hex-редактор.

Last edited by Den_spb (19-11-2011 15:26)

Offline

#160 19-11-2011 16:45

NIK
Registered: 15-11-2011
Posts: 4

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

Den_spb зайди в аську, я тебя добавил помоги пожалуйста blush

Offline

#161 29-11-2011 15:50

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

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

Заранее извиняюсь за дурацкие вопросы — допустим, я нашел в базе функций сана такую запись:

00569660	92	_Get_Z_for_XYPoint

1) Что означает число 92?
2) Как узнать количество и тип аргументов этой функции?
Полез в ИДУ, отправился на искомый адрес, нашел sub_569660, сгенерировал псевдокод:

int __cdecl sub_569660(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, float a14)
{
  return sub_401BC5(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14);
}

Тут 14 параметров, а в исходниках собейта эта функция описана как:

float CWorldSA::FindGroundZForPosition(float fX, float fY)

— два параметра.

Сама функция выглядит так:

float CWorldSA::FindGroundZForPosition(float fX, float fY)
{
	DWORD dwFunc = FUNC_FindGroundZForCoord;//константа для 0x569660;
	FLOAT fReturn = 0;
	_asm
	{
		push	fY
		push	fX
		call	dwFunc
		fstp	fReturn
		add		esp, 8
	}
	return fReturn;
}

Я не силен в ассемблере, может, здесь функция как-то сокращена?
Заранее спасибо.

Last edited by Wire (29-11-2011 15:51)

Offline

#162 29-11-2011 16:06

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

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

1.Это не функция, а это расписан ее вызов.
2.Если тебе нужно использовать ф-ю в с++, то юзай как раз этот код из собейта.

Last edited by Jack Daniel's (29-11-2011 16:07)

Offline

#163 29-11-2011 16:11

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

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

А плохая новость — конкретно эта функция постоянно возвращает 20

___add

Вызывал и собейтовским методом, и своим, все равно всегда 20.

float FindGroundZForCoord ( float x, float y )
{
	typedef float ( __stdcall *pFuncAddr ) ( float x, float y );
	pFuncAddr pFunc = (pFuncAddr) FUNC_FindGroundZForCoord;
	return pFunc ( x, y );
}

Last edited by Wire (29-11-2011 17:08)

Offline

#164 29-11-2011 17:30

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

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

Эта функция возвращает высоту относительно земли?
Короче, подай пример, где это значение можно использовать и я потом у себя протестирую.

Offline

#165 29-11-2011 18:24

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

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

1) Что означает число 92?

Размер кода функции.

2) Как узнать количество и тип аргументов этой функции?

Нужно посмотреть структуру переменных данной функции. Передаваемые параметры имеют положительное смещение (http://sannybuilder.com/forums/viewtopic.php?id=941). В данном случае передаётся 2 параметра:

    var_38= dword ptr -38h
    var_34= dword ptr -34h
    var_30= dword ptr -30h
    var_2C= dword ptr -2Ch
    var_24= dword ptr -24h
    X= dword ptr  4 // параметр 1
    Y= dword ptr  8 // параметр 2

Чтобы определить тип аргументов, нужно посмотреть код одной из процедур, вызывающих данную функцию.

Last edited by Den_spb (30-11-2011 13:11)

Offline

#166 29-11-2011 18:25

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

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

@Jack Daniel's,
Эта функция возвращает высоту по Z в точке XY. Пример... Скажем, мы хотим замутить чит, который создает машину в координатах маркера на радаре — мы берем XY этого маркера, а потом с помощью этой функции вычисляем Z в этой точке, и создаем там машину.

__add

Говорю же, я не так хорошо знаю ассемблер, как хотелось бы. Положительное смещение — признак наличия аргументов, отрицательное — их отсутствия? 34 и 38 — это получается два флоата, по четыре байта? Можешь написать пример конкретно для этой функции? Желательно с использованием и ассемблера, и… не ассемблера, не знаю, как такой способ называется smile Тот, каким я вызывал эту функцию.
А, и где можно найти процедуры, которые вызывают эту функцию?

Last edited by Wire (29-11-2011 18:38)

Offline

#167 29-11-2011 21:12

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

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

Положительное смещение — признак наличия аргументов, отрицательное — их отсутствия?

Если у переменной положительное смещение, то данная переменная является передаваемым в функцию параметром.

34 и 38 — это получается два флоата, по четыре байта?

У var_38 и var_34 смещения отрицательные (-0x38 и -0x34 соответственно). Передаваемые параметры - X и Y (смещения +4 и +8 соответственно) - оба float, по 4 байта.

Вызвал функцию с помощью клео-скрипта:

{$CLEO}
0AC6: 3@ = label @Function offset
3@ += 8
0AC7: 0@ = var 4@ offset
0A8C: write_memory 3@ size 4 value 0@ virtual_protect 0
while true
    wait 0
    if
        player.Defined($player_char)
    then
        actor.StorePos($player_actor 0@ 1@ 2@)  
        0AC6: 3@ = label @Function offset
        0AA5: call 3@ num_params 2 pop 2 0@ 1@
        0092: 4@ = float 4@ to_integer
        03F0: enable_text_draw 1
        045A: draw_text_1number 200.0 200.0 GXT 'NUMBER' number 4@  // ~1~
    end
end

:Function
hex
    B8 60 96 56 00   // mov eax, 0x569660
    FF D0            // call eax
    B8 00 00 00 00   // mov eax, 0x00000000
    D9 18            // fstp [eax]
    C3               // retn
end

Тоже всё время получается 20. Значит ты вызывал функцию правильно.

Попробуй для этой цели вызывать другую функцию - 0x05696C0 CWorld__findGroundZFor3DCoord. Она используется в опкоде 02CE: 16@ = ground_z_at 2@ 3@ 4@.

А, и где можно найти процедуры, которые вызывают эту функцию?

В IDA: View - Open subviews - Function calls. В открывшемся окне 2 списка: Caller - процедуры, которые вызывают данную функцию, Called functions - процедуры, которые вызываются данной функцией.

Last edited by Den_spb (29-11-2011 21:26)

Offline

#168 30-11-2011 12:05

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

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

стоп-стоп

B8 00 00 00 00   // mov eax, 0x00000000
    D9 18            // fstp [eax]

fstp возьмет с вершины стека параметр, округлит и поместит по нулевому адресу, ы?

Last edited by Jack Daniel's (30-11-2011 12:07)

Offline

#169 30-11-2011 12:57

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

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

Вместо 00 00 00 00 записан адрес переменной 4@ - см. начало скрипта.
Поэтому fstp запишет результат функции в переменную 4@. Округления при этом не произойдёт.

Last edited by Den_spb (30-11-2011 12:58)

Offline

#170 30-11-2011 17:33

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

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

Даже если бы число округлялось, при разных параметрах функция бы возвращала разные значения, а так постоянно 20

Offline

#171 02-01-2012 00:42

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

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

@listener
Можете дать ссылку на мануал по RW Graphics, где написано о imRender?
Я нашёл только первую часть какого-то мануала, но там этого ^ нету.


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

Offline

#172 22-01-2012 16:06

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

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

Залез в структуру RpAtomic, пытаюсь что-то изменить, но все значения тут же "восстанавливаются".


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

Offline

#173 22-01-2012 17:07

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

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

После изменения значений скриптом их "восстанавливает" какая-то функция exe - по этой же причине не удаётся вращать некоторые компоненты транспортных средств, например колёса (если записать в матрицу позиции колеса какие-то числа, а затем прочитать их и вывести на экран, то значения будут те же. Если между записью и чтением будет выполнен wait, то значения будут отличаться). Надо либо отключать эти функции, либо писать значения в структуру после отработки этих функций.

Offline

#174 04-04-2012 21:03

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

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

CEntity+0x2C m_nScanCode
0x563470 int __cdecl CWorld__ClearScanCodes()
0xB7CD78     ms_nCurrentScanCode

Что это за скан-коды?

Last edited by DK22Pac (04-04-2012 21:13)


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

Offline

#175 13-06-2013 11:33

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

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

Привет всем, у меня собралась кучка вопросов.
1) как правильно вызвать в Клео функцию getmodeltype которая есть в базе Сашки.
2) как правильно вызвать в Клео функцию проверку ismodelbike
3) кто написал maplimit.asi, меня интересует автор, а то нашел в инете, а чей не написано...
вроде все написал...


I know everything and nothing...

Offline

Board footer

Powered by FluxBB