Интересное в скриптинге

Всем привет! С Вами wmysterio, и это очередной и долгожданный урок по скриптингу GTA San Andreas. Как уже говорилось на форуме, я планирую сделать глобальную модификацию мейна, и я прошел игру заново, чтобы установить сюжет. Во время прохождения я захотел узнать как делаются некоторые вещи, и заглянул в оригинальный мейн.

Что же я нашел интересненького? Очень много любопытного. Например, узнал как сделать маркер в ввиде капельки:

title

У меня спрашивали очень много людей, и я наконец нашел ответ. Как оказалось, за это отвечает опкод:

Меня это слегка удивило, так как я, по-локиге, искал опкоды, связанные с маркерами, но как оказалось за маркеры ввиде капель отвечает радар. Чтобы достичь такого эффекта, нужно установить масштаб радара в число, отличное от нуля, например:

Удивительно, но это работает!

Cледующим шагом стало исследование исскуственно интелекта, вернее как достишь хорошего уровня интелекта за минимум строк кода. Для примера, возьмём урок и этот урок. В них речь шла о том, чтобы проигрывать анимацию последовательно, однако AS-паки используются не только для анимации, но и для других действий (я об этом знал, но в уроках не упомянул чего-то).

Что-бы заставить актёра патрулировать возле дома CJ, достаточно этого кода:

Обратите внимание на опкод 0643. Он заставляет проигрывать содержимое экшн-пака с начала по окончанию действия. Здесь важно то, что этот опкод должен находится между началом и кончом AS-пака. В противном случае повторения не произойдёт. Такой подход отлично подойдёт для мейна, где можно с помощью глобальных переменных устанавливать разные маршруты движения, имея всего 4 строки кода. Это очень важно для оптимизации кода, и мы заставляем игру больше рабоать на нас, а не на оборот.

Ещё важный момент: это модели поведения (урок). От него зависит как будет реагировать актёр на внешние события. Если нужно сделать актёра дружелюбным, то отлично подойдёт такой скрипт:

Эта модель поведения мне очень понравилась, так как актёр никак не реагируте на внешние факторы со стороны игрока. Одним словом Ван не нужно больше зрботиться о том, что ваш спутник вдруг начнёт у Вас стрелять или убегать куда-то от Вас.

title

Ещё одна новинка для меня и, надеюсь, для Вас - это как заставить актёра стрелять чаще и точнее. Я расскопал один опкод, который устанавливает частоту стрельбы с оружия:

Число 50 как раз таки и отвечает за частоту стрельбы. Насколько я понял, это значение указывается в процентах, но если поставить -1 или 100, то достигается максимум. Следущий скрипт сделает актёра машиной для убиства:

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

Далее рассмотрим ещё некоторые поведения актёров. Опкод:

Заставляет актёра атаковать врага на месте. Полезно, когда стрелка нужно разместить где-то на крыше и не нужно чтобы он пытался с неё спрыгнуть. Актёр начинает атаку, когда игрок находится в его поле видимости.

Опкод:

Заставляет актёра не бегать за жетрвой а стрелять только когда она находится в радиусе действия его оружия. В отличии от предыдущего опкода, актёр может передвигаться по его усмотрению. Используя эти скрипты, можем сделать скрипт охранника, который будет атаковать CJ при обнаружении. Для этого в место опкода 07E5 используем более так сказать "зловещий" опкод 060A, а также установим отношение актёра к игроку на ненависть. Вот что у меня получилось:

Результат оправдал себя: противник атакует только когда увидит CJ, при этом соблюдаюстя все нормы, например охранник не видит CJ, если тот спрятался за за забором в двух милиметрах от него.

Следующая "вкусняшка" - опкод 0677. Он заставляет актёра идти к другому актёру, стать напротив него и общаться. Вот этот код:

Стоит расмотреть детали параметров. Значение "lead_speaker_flag" указывает кто первым будет жестикулировать руками. Если поставить эти флаги одновременно в 1, то оба персонажа начнут махать руками. Если оба параметра установлены в 0, то ничего не произойдёт. Другой параметр пока неизвестный мне. Мои тесты показали, что если числа будут разными, то актёры подойдут, но никаких действий больше не подадут. Если оба параметра установлены в 0 или 1, то всё работает.

Я буду продолжать исследовать main, и как только найду что-то новенькое и интересное - сразу сообщу Вам. С Вами был wmysterio, пока!

Last updated

Was this helpful?