Вторник, 16.04.2024, 07:27
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с памятью игры, exe
Работа с памятью игры, 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 те же.
Quote (Den_spb)
П.С. Alien вычислял положение компонентов иначе: http://scriptsforgta.net.ru/forum/5-272-22120-16-1276606756

Ну это отдельно для башни танка, как я понял. Лично мне сейчас нужно определить позиции колёс автомобиля.
 
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

Надо проверять...
 
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с памятью игры, exe
Поиск: