Всем привет! Сегодня мы рассмотрим опкоды для изменения статистики игрока. Статистика - это то, чего достиг игрок за игровое время. Например уровень стрельбы с АК-47, насколько от сыт и.т.п. Для изменения какой то статистики, обычно используют 2 опкода:
  • 0629: change_integer_stat 181 to 0
  • 062A: change_float_stat 21 to 800.0
Опкоды устанавливают значения для ID статистики игрока. Здесь:
21 и 181 - ID статистики(см. Статистика игрока)
0 и 800.0 - соответственно значения, которые принимает статистика
.
Первый опкод изменяет статистику, значение которой целое число, второй - для дробных.

Давайте напишем скрипт, который стразу даёт максимальные навыки оружия, максимальная жизнь - 1450.0(в такой настройке полоска выход даже за пределы обычного):
Code
{$CLEO}
0000:

:STAT_PL
thread 'STAT_PL'
wait 0
062A: change_float_stat 165 to 2000.0
062A: change_float_stat 23 to 1000.0
062A: change_float_stat 21 to 0.0
0629: change_float_stat 22 to 1000
062A: change_float_stat 80 to 2000.0
062A: change_float_stat 225 to 2000.0
062A: change_float_stat 223 to 1000.0
062A: change_float_stat 229 to 1000.0
062A: change_float_stat 230 to 2000.0
062A: change_float_stat 24 to 1450.0
062A: change_float_stat 69 to 1000.0
062A: change_float_stat 70 to 1000.0
062A: change_float_stat 71 to 1000.0
062A: change_float_stat 72 to 1000.0
062A: change_float_stat 73 to 1000.0
062A: change_float_stat 74 to 1000.0
062A: change_float_stat 75 to 1000.0
062A: change_float_stat 76 to 1000.0
062A: change_float_stat 77 to 1000.0
062A: change_float_stat 78 to 1000.0
062A: change_float_stat 160 to 1000.0
0A93: end_custom_thread
В результате игрок станет "прокачанным" в любой момент. Обратите внимание на полоску жизни:


Так же мы можем узнать текущее значение статистики, используя опкоды:
  • 0653: 0@ = float_stat 21
  • 0652: 0@ = integer_stat 181
Здесь:
0@ - переменная, в которую будет записано значение
21 - ID статистики(дробное)
181 - ID статистики(целое)


Полученный результат можно использовать в проверках:
Code
0653: 0@ = float_stat 21
if
0@ > 300.0
then
    // выполнять какие то действие, например написать "Нужно есть больше или меньше"
end
Статистика 181: при установке следующих значений будут "открыты" такие территории:
Code
0 - Лос Сантос
1 - Сельская местность
2 - Сан Фиеро
3 - Лас Вентурас
4 - Открыть всё
Если установить значение 0, то при попадании за территории Лос Сантоса вы получите 5 звёзд.

Можно так же выполнять прямые записи к существующему значению статистики:
  • 0623: add 1 to_integer_stat 214
  • 0624: add 1.0 to_float_stat 160
  • 0628: add 1@ to_float_stat 2
  • 0625: decrease_integer_stat 184 by 1
  • 0626: decrease_float_stat 21 by 1.0
  • 0627: update_integer_stat 215 to $1922
  • 0A10: increase_integer_stat 161 by 1
  • 0A1F: increase_float_stat 24 by 196@
  • 042E: downdate_integer_stat 212 to 448@
  • 0582: downdate_integer_stat 175@($RACE_INDEX,30i) to 450@
То есть, что бы не писать такой код:
Code
0653: 0@ = float_stat 21
0@ += 100.0
062A: change_float_stat 21 to 0@
Можно сразу прибавить к значению статистики своё число: 0624: add 100.0 to_float_stat 21. С остальными уже поэкспериментируйте, там можно сложить, вычитать делить и умножать значения статов.

Мимо этого существуют опкоды для узнавания значений некоторых ID статистики:
  • 08E1: 0@ = total_tags_sprayed // Целое число
В переменную 0@ будет записано к-во закрашенных граффити
  • 08E2: 0@ = territories_controlled_percentage // Целое число
В переменную 0@ будет записано процент владения территориями. Если все территории принадлежат вам, то в переменную занесёт 100.

Так же есть возможность отключить функцию показа статистики. Когда нажимаем "Действие"(по умолчанию кн. TAB) статистика не будет показана:
  • 0960: enable_player $PLAYER_CHAR stats_box 0
Если поставить 1 - то будет. Этот опкод рекомендовано использовать в циклах.

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

Tom_Harison   (27.08.12 17:32)
классный урок

wmysterio   (27.08.12 17:43)
biggrin

Cool_T   (31.03.14 11:00)
А как сделать чтобы при заходе в игру в переменую (например:PLSTAT@) записывалась текущая стата гг и при нажатие кнопки "L" стата становилась максимальной,а при нажатии кнопки "K" стата возращалась обратно которая была записана в переменую

SanKing   (31.03.14 15:13)
Все вопросы пиши в тему "Вопросы по скриптингу Sanny Builder".
Вход на сайт

Поиск
Категории раздела
Мини-чат
Наш опрос
Что скажете о GTA V?
Всего ответов: 50
Активность на сайте
Друзья сайта
Статистика

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