#101 10-07-2011 18:02

[ED]Andr
Registered: 24-07-2010
Posts: 17

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

Возникла такай ситуация, нужно в скрипте здоровье машины показывать на экране, но в скрипте очень много прыжков, и текст ужасно мигает.Решил сделать второй скрипт, который будет измерять эту переменную.Переменные типа var 0 = 100 не помогли.Решил сделать так:

0AAA: 0@ = thread 'OTB' pointer
if
0@ <> 0
then
0@ += 60
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
end

смещение 60 - это массив локальных переменных.А что дальше делать с этим массивом,как достать нужную переменную?

Offline

#102 11-07-2011 08:26

~AquaZ~
Registered: 01-03-2010
Posts: 726

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

номер переменной * 4
т.е. 0@ - 0
1@ - 4
2@ - 8
...

Offline

#103 11-07-2011 11:37

}0RIC)-(
Registered: 21-11-2010
Posts: 30

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

[ED]Andr, раскрою тебе секрет) для того чтобы текстуры или текст не "мигали" должен быть 1 цикл:

:1
wait 0
gosub @2 //своего рода "подпрограмма"
тут отображение текста 1@
jump @1

:2 //то что я назвал подпрограммой
//без wait 0
//ну и тут хоть запрыгайся, главное чтобы у гоусаба был выход (иначе вылет)
измерил то что надо в переменную скажем 1@
return //выход из гоусаба

Last edited by }0RIC)-( (11-07-2011 11:38)

Offline

#104 11-07-2011 17:47

[ED]Andr
Registered: 24-07-2010
Posts: 17

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

Спасибо вам,выручили..

Offline

#105 18-07-2011 17:43

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

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

Что находится здесь:

[CPed+134h]

?
Я попытался сам выяснить, но это мне ничего не дало:

CPed+0x134 -> 0xF8FF248 -> 0xE12C034 -> 0x86D168

В базе listener'a 0x86D168 подписан как _CPlayerPed::`vtbl'.

Игра использует этот указатель, когда создаёт тени педов. Если в процедуру (0x707390, второй параметр) передать не [CPed+134h], а 0, то тень отрисуется просто в заданной точке и с заданными размерами, и будет дейтсвовать только на землю.
Если же передать в процедуру [CPed+134h], то тень отрисуется относительно педа, а также с изменёнными размерами. Единое "преимущество" "такой" тени - она рисуется не только на земле, но и на стенах:
gtasa2011071813181412.th.jpg
, что мне и нужно...


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

Offline

#106 18-07-2011 19:45

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

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

@DK22Pac -

если я ничего не путаю: CPed+0x134 => CEntity * CPhysical::m_pCollidedEntity
Указатель на объект, с которым соприкасается объект (от CPhysical наследуются CPed, CVehicle или CObject).


C5 - GTA IV/RDR/GTA V script compiler.
~ 60% done.

Offline

#107 20-07-2011 08:02

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

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

listener - это смещение (0x134) указывает на

CEntity * CPhysical::m_pCollidedEntity

только для CPed?
Попытался прочитать это смещение для обьектов и автомобилей, но всегда получаю 0...

Ещё, я нашёл на gtamodding это:

CPed +0x584 = [dword] Текущий Entity (объект), с которым вы находитесь в контакте

Попытался подставить [CPed+0x584] вместо [CPed+0x134], но игра такого не приняла (вылет).
Вероятно, CPed+0x134 ведёт к какому-то массиву обьектов, которые находятся поблизи педа? (ведь зачем же ещё передавать такой параметр в процедуру, которая рисует тень от педа на ближайших обьектах. К тому же, когда пед в воздухе, CPed+0x134 всё ещё указывает на что-то, когда в автомобиле, - указывает на значение 0).

Last edited by DK22Pac (20-07-2011 08:13)


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

Offline

#108 20-07-2011 21:03

[ED]Andr
Registered: 24-07-2010
Posts: 17

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

Опять же вернусь к потоку, вот код, который должен вывести на экран число 123:

03F0: enable_text_draw 1
1@ = 123
while true
    wait 0
    if
        Player.Defined($player_char)
    then
        if
            0ab0: 52
        then
            0A9F: 4@ = current_thread_pointer
            if
                4@ <> 0
            then
                4@ += 60
                0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0
                4@ += 4                
                0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0 
                33@ = 0               
                repeat
                wait 0
                dec(33@)
                03E4: enable_text_draw_align_right 1 
                033F: set_text_draw_letter_size 0.5 0.8 
                081C: draw_text_outline 1 RGBA 0 0 0 55 
                045A: draw_text_1number 559.0 158.0 GXT 'NUMBER' number 4@ 
                until 33@ == 5000
            end
        end
    end
end

Но вылетает, я даже не могу предположить почему.Вылетает второй опкод 0A8D:

Last edited by [ED]Andr (20-07-2011 21:05)

Offline

#109 20-07-2011 21:11

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

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

4@ += 60
0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0
4@ += 4                
0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0

замени на

4@ += 64                
0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0

listener, если будет время, ответь, пожалуйста, на вопросы^^


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

Offline

#110 18-08-2011 15:40

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

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

Хотел спросить в «одном вопросе», но видимо простыми опкодами этого не сделаешь. Так вот, вопрос первый: можно ли как-то заставить пистолеты стрелять во время воспроизведения актером анимации? И вопрос второй: как узнать углы поворота и позицию… ээ… рук, когда они стреляют из двуручного оружия — узнать, а также поменять.

Offline

#111 18-08-2011 18:48

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

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

Поворот рук, наверное, никак. Т.к это анимация. Если только через аним-эдитор.

Offline

#112 18-08-2011 20:05

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

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

Повороты - через залазание в RpClump... lol
Если просто узнать позицию, - то для этого есть конкретный метод.

Ну, в общем, некий японский скриптер Ryosuke предоставил на своём сайте некую scm-функцию, которая позволяет получить координату на оффсете от кости.
Так вот, - узнаём оффсет с параметрами .0 .0 .0, далее - .0 1.0 .0, ну и получаем позицию и вектор направления кости в 3D пространстве, так сказать.

PS А ты что именно делаешь?
Мы вот раньше этим занимались.
http://www.gtaforums.com/index.php?show … 8077&st=20

Last edited by DK22Pac (18-08-2011 20:23)


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

Offline

#113 18-08-2011 22:00

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

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

Ооо…
Я делаю минимод по фильму Эквилибриум, думаю, кто смотрел, сразу поймет smile
Хочу сделать Ката Стрелка (Gun Kata, не уверен, что в русском это слово склоняется) — вымышленное (и не очень) боевое искусство, принцип которого заключается в статистическом предсказании позиций противника в перестрелке и, как следствие, мастерское владение двумя пистолетами.
Собственно по моду — чтобы реализовать эту идею, нужно либо научить игрока стрелять из любой анимации, либо как-то вручную направлять руки при стрельбе. Трудностей не боюсь, можете предлагать самые зверские решения, лишь бы они были smile

___Edit

Так вот, - узнаём оффсет с параметрами .0 .0 .0, далее - .0 1.0 .0, ну и получаем позицию и вектор направления кости в 3D пространстве, так сказать.

Вообще когда у меня раньше возникала надобность узнать координаты и угол кости, я просто аттачил к ней объект, потом считывал его координаты, а затем опкодом 0400 узнавал «направление» — и вуаля! Или ты это и имел ввиду?

Last edited by Wire (18-08-2011 22:23)

Offline

#114 19-08-2011 07:17

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

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

0AB1: call_scm_func @GET_BONE_OFFSET 5 actor $PLAYER_ACTOR bone 6 offset 0.679 -0.039 0.111 store_to 1@ 2@ 3@
0AB1: call_scm_func @GET_BONE_OFFSET 5 actor $PLAYER_ACTOR bone 6 offset 30.679 -0.039 0.111 store_to 4@ 5@ 6@
06BC: create_M4_shoot_from 1@ 2@ 3@ target 4@ 5@ 6@ energy 1
058A: create_gun_flash_from 1@ 2@ 3@ to 4@ 5@ 6@
:GET_BONE_OFFSET                
0A96: 0@ = actor 0@ struct      
0085: 5@ = 0@                   
5@ += 0x18 
0A8D: 5@ = read_memory 5@ size 4 virtual_protect 0 
0AA7: call_function 0x734A40 num_params 1 pop 1 5@ 5@ // _clumpGetFirstSkinAtomicHAnimHierarchy 
1@ *= 0x4 
1@ += 0x488 
005A: 1@ += 0@
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 
1@ += 0x14 
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 
0A8D: 7@ = read_memory 0x7C51E0 size 4 virtual_protect 1 
if 
    7@ == 0x0424548B
then 
    0AA7: call_function 0x7C51E0 num_params 2 pop 2 1@ 5@ 1@ // _RpHAnimIDGetIndex 
    0AA7: call_function 0x7C5160 num_params 1 pop 1 5@ 5@ // _RpHAnimHierarchyGetMatrixArray 
    1@ *= 0x40 
    005A: 1@ += 5@
else
    0AA7: call_function 0x7C51A0 num_params 2 pop 2 1@ 5@ 1@ // _RpHAnimIDGetIndex
    0AA7: call_function 0x7C5120 num_params 1 pop 1 5@ 5@ // _RpHAnimHierarchyGetMatrixArray
    0012: 1@ *= 0x40 
    005A: 1@ += 5@ // (int) 
end
0A9F: 5@ = current_thread_pointer 
5@ += 0x44 
0AA5: call 0x54EEF0 num_params 4 pop 4 5@ 1@ 1 5@ // _transofrmPoints 
0AB2: ret 3 2@ 3@ 4@

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

Offline

#115 19-08-2011 15:17

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

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

Спасибо. Кстати, как правильно пользоваться опкодами 0AA5 и 0AA7? (Справку я читал smile)
А точнее, что неправильно в этом коде?

:test1
wait 0
if and
not actor.Dead($PLAYER_ACTOR)
0ADC: test_cheat "VIDEO"
jf @test1
    //0B17: show_message_box "Preved!"
    0AA5: call 0x7476B0 num_params 2 pop 2 1 "Logo.mpg"
    wait 2000
jump @test1

По адресу — процедура, проигрывающая видео, void __cdecl PlayMPEG(int nShowCmd, char *filename)

___Edit:

Хммм, перечитал хелп еще раз, написано, что строковые параметры использовать нельзя, а как же тогда?

Last edited by Wire (19-08-2011 15:23)

Offline

#116 19-08-2011 17:06

RDH
From: Энгельс
Registered: 09-01-2010
Posts: 65

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

Wire wrote:

Спасибо. Кстати, как правильно пользоваться опкодами 0AA5 и 0AA7? (Справку я читал smile)
А точнее, что неправильно в этом коде?

:test1
wait 0
if and
not actor.Dead($PLAYER_ACTOR)
0ADC: test_cheat "VIDEO"
jf @test1
    //0B17: show_message_box "Preved!"
    0AA5: call 0x7476B0 num_params 2 pop 2 1 "Logo.mpg"
    wait 2000
jump @test1

По адресу — процедура, проигрывающая видео, void __cdecl PlayMPEG(int nShowCmd, char *filename)

___Edit:

Хммм, перечитал хелп еще раз, написано, что строковые параметры использовать нельзя, а как же тогда?

Строки передавать можно, но насколько я знаю, эту процедуру нельзя так просто вызвать. На английском форуме то ли Deji то ли ZAZ написал код как её вызвать. И главное: параметры надо передавать в обратном порядке!


programmer.png
modder.jpg

Offline

#117 19-08-2011 17:12

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

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

И главное: параметры надо передавать в обратном порядке!

Ах вооот оно что, спасибо. Кстати, а тогда в опкоде 0AA7 параметр для возвращаемого значения нужно таки указывать первым или последним?

Offline

#118 19-08-2011 17:28

RDH
From: Энгельс
Registered: 09-01-2010
Posts: 65

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

Wire wrote:

И главное: параметры надо передавать в обратном порядке!

Ах вооот оно что, спасибо. Кстати, а тогда в опкоде 0AA7 параметр для возвращаемого значения нужно таки указывать первым или последним?

Последним

Last edited by RDH (19-08-2011 20:41)


programmer.png
modder.jpg

Offline

#119 30-08-2011 22:45

Leonid_Z
Registered: 30-08-2011
Posts: 2

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

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

Читал на форуме тему про смещение и вращение деталей машины, но это немного другое... а мне нужно двигать игрока.

Что посоветуете по этому поводу?

Offline

#120 31-08-2011 12:21

kenking
From: Казахстан
Registered: 28-06-2010
Posts: 253

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

Leonid_Z wrote:

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

Читал на форуме тему про смещение и вращение деталей машины, но это немного другое... а мне нужно двигать игрока.

Что посоветуете по этому поводу?

Внимательней почитай ту тему. Там есть пример перемещения игрока вместе с сидением в авто.
http://sannybuilder.com/forums/viewtopi … 686#p14686
а смещение

+48          ped_frontseat    дамми передних сидений

Offline

#121 31-08-2011 17:09

Leonid_Z
Registered: 30-08-2011
Posts: 2

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

В том то и проблема, что "вместе с сиденьем перемещается", а нужно чтобы только актор смещался не затрагивая компонентов машины.

Уверен гдето зарыты эти координаты в памяти, вот только в каком направлениии копать. Пробовал по базе Листнера искать, но с ассемблером у меня пока туго...

Offline

#122 01-09-2011 04:43

kenking
From: Казахстан
Registered: 28-06-2010
Posts: 253

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

В моделях нет такого компонента, как сидения. Это дополнительная деталь. Это я сделал для примера.  Чтобы переместить игрока, надо перемещать дамми передних сидений. Повторюсь это смещение +48. Как определить это смещение читай в той же теме. Там уже всё 'разложено по полочкам'.

Offline

#123 08-09-2011 17:18

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

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

Вопрос: Как отключить прорисовку маркеров?

UpD. Уже нашел.

Last edited by Jack Daniel's (09-09-2011 11:42)

Offline

#124 26-09-2011 13:46

met dog
Registered: 22-03-2011
Posts: 64

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

есть вопрос . Как находить координаты игрока  (в любой игре .я лично хочу попробовать на call of duty black ops)и можно ли сделать это такими программами как Artmoney pro(более расширенные возможности )или это надо долго и нудно копаться в адресах?(если все так и будет то пожалуйста поподробнее расскажите как это сделать )

Offline

#125 02-10-2011 09:39

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

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

По какому адресу находится значение задержки обновления кадров? Я не про fps limiter

Last edited by Jack Daniel's (02-10-2011 09:51)

Offline

Board footer

Powered by FluxBB