Работа с памятью игры, exe
|
|
Den_spb | Дата: Понедельник, 27.09.2010, 01:38 | Сообщение # 31 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Этого не знаю. Спроси на СБ.
|
|
| |
DK22Pac | Дата: Суббота, 23.10.2010, 03:28 | Сообщение # 32 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Вот, написал=) В стандарте было просто команда добавления к значению по адрессу, я дополнил=) Просто для примера) линк Спасибо ещё раз.
|
|
| |
Den_spb | Дата: Суббота, 23.10.2010, 04:27 | Сообщение # 33 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (DK22Pac) Вот, написал=) И что же делает данный код?
|
|
| |
DK22Pac | Дата: Суббота, 18.12.2010, 04:49 | Сообщение # 34 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Вот есть такая функция Code 0x6A2210 CAutomobile_getComponentWorldPosition Как её вызывать? Тут 2 параметра, как я понимаю, это ID компонента и указатель на буффер для записи координат. Code 0AC7: 15@ = var 16@ offset 0AA6: call_method 0x6A2210 struct 0@ num_params 2 pop 0 15@ 15 Так вроде бы правильно, но в 16@, 17@, 18@ записываются нули.
|
|
| |
Den_spb | Дата: Суббота, 18.12.2010, 09:22 | Сообщение # 35 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Единственное, что могу сказать точно - тип функции и количество параметров определены верно. Что за компонент - 15? Есть уверенность, что он присутствует на данном автомобиле? П.С. Alien вычислял положение компонентов иначе: http://scriptsforgta.net.ru/forum/5-272-22120-16-1276606756
|
|
| |
DK22Pac | Дата: Суббота, 18.12.2010, 21:56 | Сообщение # 36 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Дело в том, что такая же функция присутствует в gta III, она там нормально работала. 15 - это ID левой двери автомобиля, думаю, в СА эти ID те же. Ну это отдельно для башни танка, как я понял. Лично мне сейчас нужно определить позиции колёс автомобиля.
|
|
| |
Den_spb | Дата: Воскресенье, 19.12.2010, 01:48 | Сообщение # 37 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Кроме башни можно вычислять и положение других компонентов, если указать другие смещения. Что касается позиции думмисов (колёса, фары, выхлопная труба и т.д.), то их можно вычислять через структуру модели. Пример тут: http://sannybuilder.com/forums/viewtopic.php?pid=6933#p6933 Code 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 //vehicle struct 0@ += X Подставив нужное значение смещения X (кратно 12 т.к. 3 координаты - 3 числа float), можно получить оффсеты интересующего думмиса.
|
|
| |
DK22Pac | Дата: Среда, 22.12.2010, 02:45 | Сообщение # 38 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Спасибо. То, что нужно.
|
|
| |
d88 | Дата: Среда, 29.12.2010, 09:10 | Сообщение # 39 |
Группа: Проверенные
Сообщений: 113
Статус: Offline
| Можно как-то через память создать взрыв другого радиуса? А то все те что в списке слишком большие.
Сообщение отредактировал d88 - Среда, 29.12.2010, 09:11 |
|
| |
DK22Pac | Дата: Среда, 29.12.2010, 12:16 | Сообщение # 40 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| d88, а почему бы тебе не попробовать тип 12 (explosion_tiny)? На сайте Ryosuke расписана структура Explosion Code Start 0xC88950 Size 0x7C Num 0x10
+0x00 DWord Explosion Type +0x04 Float X Position +0x08 Float X Position +0x0C Float X Position +0x10 Float Unknown +0x14 Float Unknown 0.5 +0x18 DWord Unknown 0 +0x1C DWord Unknown 0 +0x20 Float Disappear Time (from 0xB7CB84) +0x24 Float Unknown 1.0 +0x28 Byte Frames from Created +0x29 Byte Unknown 1 +0x2A Byte Unknown 1 +0x2B Byte Unknown 0 +0x2C Float Created Time (from 0xB7CB84) +0x30 DWord Unknown 0 +0x34 Float Visible Radius +0x38 DWord Unknown 0 +0x3C DWord Time from Created +0x40 - +0x78 Float Effect Coords Вот так вроде бы должно быть Code {$CLEO .cs}
var 0@: int 5@: int end
0000: while true wait 0 if player.Defined(0) then if 0ab0: 36 then 04C4: store_coords_to 1@ 2@ 3@ from_actor $player_actor with_offset 0.0 5.0 0.0 0948: create_explosion_at 1@ 2@ 3@ type 12 camera_shake 0.0 while true for 0@ = 0xC88950 to 0xC89110 step 0x7C 0A8D: 4@ = read_memory 0@ size 4 virtual_protect false if 4@ == 12 then 5@ = 0@ inc(5@, 0x34) 0A8C: write_memory 5@ size 4 value 1.0 virtual_protect true end end wait 0 end end end end но даный код почему-то не действует. @Den_spb Каким способом связаны хэндл и адресс начала структуры? Видел в одном коде, что хэндл приравняли к началу структуры... При этом код работал. Верно ли это?
|
|
| |
d88 | Дата: Среда, 29.12.2010, 13:33 | Сообщение # 41 |
Группа: Проверенные
Сообщений: 113
Статус: Offline
| Quote (DK22Pac) d88, а почему бы тебе не попробовать тип 12 (explosion_tiny)? Потому что мне надо ещё меньше.
|
|
| |
Den_spb | Дата: Среда, 29.12.2010, 13:57 | Сообщение # 42 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (DK22Pac) При этом код работал. Верно ли это? Совпадать хэндл и указатель по идее не должны. Как хэндл переводится в указатель я не знаю, но если ты хорошо понимаешь ассемблер, можешь посмотреть, например, код функции CPool_CVehicle__atHandle - она переводит хэндл транспортного средства в указатель.Quote (d88) Можно как-то через память создать взрыв другого радиуса? Опкод 020C: create_explosion_with_radius 0 at 72@ 73@ 74@ не пробовал? В нём, как видно, есть параметр радиуса.
|
|
| |
d88 | Дата: Среда, 29.12.2010, 18:50 | Сообщение # 43 |
Группа: Проверенные
Сообщений: 113
Статус: Offline
| Quote (Den_spb) Опкод 020C: create_explosion_with_radius 0 at 72@ 73@ 74@ не пробовал? В нём, как видно, есть параметр радиуса. Ден, разве ты не знаешь в опкодах связанными со взрывами хоть и написано «радиус», на самом деле это тип. Они в справке даны. Кстати, радиус взрыва можно менять подредактировав какой-то файл в data, вот я и подумал, что через память наверное тоже можно. Но я в этом не шарю.
|
|
| |
Den_spb | Дата: Четверг, 30.12.2010, 06:20 | Сообщение # 44 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (d88) Ден, разве ты не знаешь в опкодах связанными со взрывами хоть и написано «радиус», на самом деле это тип. Они в справке даны. Да, верно. Не обратил внимание на то, что число целое.Quote (d88) через память наверное тоже можно. Ответ надо искать в функции CExplosion__addExplosion, которая занимается созданием взрывов. Какой параметр там отвечает за радиус взрыва я сказать не могу, т.к. код большой и сразу в нём не разобраться. Quote (d88) Но я в этом не шарю. Это не намного сложнее, чем скриптинг с помощью стандартных опкодов. Будет время, может напишу статью по продвинутому скриптингу для новичков.
|
|
| |
DK22Pac | Дата: Четверг, 30.12.2010, 13:16 | Сообщение # 45 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| d88, я же привёл данные. Возможно, радиус находится по следующим оффсетам: Code +0x10 Float Unknown +0x14 Float Unknown 0.5 +0x24 Float Unknown 1.0 +0x34 Float Visible Radius +0x40 - +0x78 Float Effect Coords Надо проверять...
|
|
| |