Рейтинг - 4.5 (2)

Начинаем первый в этом году урок, который посвящен игровой памяти. Сегодня мы рассмотрим структуру weapon.dat и будем учится вычислять адреса характеристик оружия.

Здравствуйте, уважаемые пользователи нашего сайта! Что бы вычислить, нужно сделать небольшие вычисления. Первым делом считываем адрес начала структуры:

0@ = 0xC8AAB8 // адрес начала структуры (это число 13150904)

Далее нам необходимо сместится по структуре. Для этого нам нужно узнать номер оружия, по которому будет идти редактирование а также навык владения этим оружием. Для примера, давайте возьмём АК47 и увеличим количество патронов в обойме с 30 до 400. Номер смотрим в справке или в нашей базе данных. Как видим, номер АК47 - 30. Запомним его. Потом нам необходимо уточнить в каком навыке мы будем делать изменения. Есть 4 навыка владения оружием и каждый имеет свой номер. Вот таблица навыков и их номера:

НомерНавык
0Низкий ( начальный )
25Нормальный ( уровень профессионала )
36Высокий ( уровень киллера )
47Для копов

Думаю, в игре Вы видели, что при стрельбе с оружия на экране появлялись текст-боксы с сообщениями типа: "Ваш навык стрельбы повышен. Теперь вы можете стрелять точнее, дальше и т.п.". Вот об этом навыке и идёт речь. Допустим мы задали уровень владения навыка для СЖ на максимум ( высокий ). Запоминаем номер этого навыка и запишем в переменные эти номера:

1@ = 30 // номер оружия
2@ = 36 // навык владения

Значения этих переменный нам нужно сложить. Это нужно для того, что бы двигаться по структуре, каждая из которых равна 0x70 байт ( 112 байт ):

0A8E: 3@ = 1@ + 2@ // ( int )
3@ *= 0x70 // определяем размер смещения

Далее нам необходимо сделать смещение от начала структуры:

005A: 0@ += 3@ // ( int )

Теперь к этой переменной мы прибавляем саму характеристику. Посмотреть некоторые характеристики вы можете в базе данных. Так, как мы собираемся изменять максимальное количество патронов в обойме, то размер смещения будет равен 32:

0@ += 32 // получить характеристику

Всё! Адрес вычислен! Теперь только поменяем значения на нужные:

0A8C: write_memory 0@ size 2 value 600 virtual_protect 0

Теперь в обойме будет 600 патронов :) Давайте напишем скрипт, который будет делать вычисления:

{$CLEO}
0000:
0627: change_stat 77 to 9999.0
model.Load(#AK47)
038B: load_requested_models

while not model.Available(#AK47)
wait 0
end

0@ = 0xC8AAB8 
1@ = 30
2@ = 36
0A8E: 3@ = 1@ + 2@ // ( int )
3@ *= 112 // 0x70
005A: 0@ += 3@ // ( int )
0@ += 32

0A8C: write_memory 0@ size 2 value 600 virtual_protect 0
01B2: give_actor $PLAYER_ACTOR weapon 30 ammo 1500
model.Destroy(#AK47)
0A93: end_custom_thread

Результат:

Однако, не нужно забывать, что вы редактируете не текущее оружие, которые будет держать/держит СЖ. Эти характеристики будут влиять на использование и других актёров.


Теги: структура weapon.dat, динамические адреса памяти, адреса памяти

HYPERMUV   (12.01.13 20:32)
Пиши больше уроков, будет больше людей.
А насчёт уроков, не чего плохого не могу сказать!

Ivan_Black   (13.01.13 19:15)
32 = 0x20 как так?

wmysterio   (15.01.13 19:51)
Выдели в SB число 32 и нажми CTRL+H. Мы получим число 0x20. Это число, переведенное в шестнадцатеричное значение.

Ivan_Black   (16.01.13 17:47)
сделай урок по Cwanted памяти

novice07   (31.05.13 19:29)
Можешь сделать пример на C++ этого же самого? ASI Plugin вообщем

wmysterio   (01.06.13 23:51)
нет, не могу. я ASI-плагины никогда не писал
Вход на сайт

Поиск
Категории раздела
Мини-чат
Пожалуйста, все вопросы по скриптингу задавать на форуме!
Наш опрос
Какие GTA вы прошли ( сюжетная линия )?
Всего ответов: 8
Активность на сайте
Пожертвования
Кошельки WebMoney:
U859420971000
R407741810602
Z331072372430
E314272616890
Друзья сайта
Полезные ресурсы
Статистика

Онлайн всего: 2
Гостей: 1
Пользователей: 1
wmysterio
Сегодня нас посетили:
wmysterio, Dyabda
Реклама