Приветствую Вас, Гость! Регистрация RSS
Понедельник, 29.04.2024
[ Главная страница · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Моды GTA SA, читы для samp » CLEO программирование » CLEO уроки » Урок №4 Создание актёров
Урок №4 Создание актёров
SAIFER-23RUSДата: Понедельник, 08.10.2012, 16:27 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 6

Перед созданием необходимо загрузить модель актера, например #ARMY.
Вот и команда для создания актера:
Actor.create(1@,4,#ARMY,X,Y,Z)
1@ - это переменная актера, с помощью которой им можно манипулировать.
4 - тип актера (коп, мужчина, бандит и т.д.)
#ARMY - имя загруженной нами модели
X, Y, Z - координаты (ТОЛЬКО ДРОБНЫЕ)

Вот мы и создали актера, теперь надо что-нибудь с ним сделать, например, увеличить здоровье.
Это делается вот этой командой
Actor.health(1@) = 350
1@ - переменная актера, которого мы создали
350 - количество здоровья (не может быть дробным числом!)
Теперь дадим ему броню
Actor.armour(1@) = 200
1@ - переменная актера
200 - количество боони (тоже не дробное!)
Теперь повернем его
Actor.angle(1@) = 90.0
1@ - переменная актера
90.0 - угол в градусах (ТОЛЬКО ДРОБНЫЙ)
И напоследок дадим ему оружие. Перед этим модель оружия необходимо загрузить.
01B2: give_actor 1@ weapon 18 ammo 250
1@ - переменная актера
18 - номер оружия (это револьвер из ВС)
250 - количество патронов к оружию.
Чтобы сделать актера простым пешеходом и убрать о нем сведения, используйте вот эту команду
actor.RemoveReferences(1@)
1@ - переменная актера
Смотрите пример и разбирайтесь. Пример для VC, но, если выбрать другую модель оружия, то и для SA подойдет.

:MyScript01 //начало
wait 0 // чтобы не вылетело ждем 0 миллисекунд
model.load(#ARMY) // объявляем модель актера
model.load(#PYTHON) // объявляем модель оружия
038B: load_requested_models // загружаем объявленные модели

:MyScript02 // вторая метка
wait 0 // чтоб не вылетало
if and // проверка нескольких условий
model.Available(#ARMY) // проверка на загруженность модели
model.Available(#PYTHON) // проверка на загруженность модели
jf @MyScript02
wait 10 //ждем 10 миллисекунд
// ну а дальше все уже понятно...
actor.create(1@,6,#ARMY,-1200.1,550.5,12.3)
actor.health(1@) = 150
actor.armour(1@) = 200
actor.angle(1@) = 270.0
01B2: give_actor 1@ weapon 18 ammo 250
wait 1500
actor.RemoveReferences(1@) //удаляем из памяти сведения об актере
model.destroy(#ARMY) // выгружаем модели
model.destroy(#PYTHON)
end_thread // завершаем скрипт

Дополнительная информация

АКТЁРЫ
Актёры-это все люди,которых вы видели в игре,кстати игрок тоже явл. полноправным актёром.
Чтобы создать актёра,надо сначало загрузить его модель в память,делается это вот этой ко-
мандой:
model.load(#модель)
Этой командой мы только объявили нужную для загрузки модель,а вот загружаются все модели
вот этой командой:
038B: load_requested_models
Эта команда пишется после объявки уже всех используемых в вашем потоке объектов.Вот как бу-
дет выглядить то,что я только-что описал:
model.load(#модель1)
model.load(#модель2)
model.load(#модель3)
model.load(#модельN)
038B: load_requested_models
Теперь нужно проверить,загрузились ли все модели в память,а то если не загрузились,а мы с
ними что-то делаем,то игра естественно вылетит.Проверка делается следующим способом:
:Check
wait 0
if and
model.available(#модель1)
model.available(#модель2)
model.available(#модель3)
model.available(#модельN)
jf @Check
Полная загрузка делается соединением этих двух вышеописанных выражений:
:MyThread // Первый label потока.Не забудьте,что поток тоже надо создать.
wait 0 // Ждём 0 миллисекунд,если не напишем,то игра вылетит.
model.load(#модель1) // Тут объявляем нужные для потока модели.
model.load(#модель2)
model.load(#модель3)
model.load(#модельN)
038B: load_requested_models // А вот тут уже загружаем нужные для потока модели.
:Check // Создаём другой label.
wait 0 // Ждём 0 миллисекунд,если не напишем,то игра вылетит.
if and // Пишем условие с выполнением всех подусловий(проверок).
model.available(#модель1) // Подусловие на загруженность модели в память.
model.available(#модель2)
model.available(#модель3)
model.available(#модельN)
jf @Check // Если в условии не выполнились подусловия,то перходим в
начало проверки,если же все выполнились,то выполнение
скрипта идёт дальше.

Актёр создаётся следующей командой:
actor.create(name,type,model,x,y,z)
name - имя актёра,должно обязательно начинаться на $(глобальная переменная) или заканчивать-
ся на @(переменная,действующая только в том потоке,в котором вы её объявили),а вобщем-то всё
по поводу типов данных написано в главе "Математика".
type - это тип актёра,тип актёра-целое число,типы приведены ниже .
model - это модель актёра,все модели обыкновенных актёров написаны во втором столбике файла
"Peds.ide",который находится в папке "data" вашего GTA San Andreas.Откройте его любым тексто-
вым редактором.Перед именем модели всегда надо ставить знак "#",кавычек не надо.
x - координата по оси X
y - координата по оси Y
z - координата по оси Z
Вот например:
actor.create($MyAct,4,#FAM1,-2400.0,500.8,24.2) //заметьте,что координата всегда число с
точкой,всё по поводу чисел в главе "Числа".

Давайте создадим актёра возле дома CJ'я:
Я создал поток с именем MAN,как создавать потоки писалось в первой главе,вот этой командой:
create_thread @MAN
Затем нашёл строчку -Mission 0- и выше неё написал:
:MAN //имя нашего потока
wait 0 // поставил нулевую задержку,если не поставить,то игра вылетит
model.load(#FAM1) // объявил нужную для загрузки модель актёра
038B: load_requested_models // загрузил ранее объявленые модели

:MAN_2 // создал второй label нашего потока
wait 0 // поставил нулевую задержку,если не поставить,то игра вылетит
if // Пишем условие для одной проверки
model.available(#FAM1) // проверяем загрузилась ли наша модель
jf @MAN_2 // если ещё не загрузилась,то выполнение скрипта переходит на label "MAN_2"
// если уже загрузилась,то выполнение скрипта пойдёт дальше.
actor.create($MyAct,4,#FAM1,2494.4622,-1680.92,13.3385) // написал вот эту команду,затем нашёл
//координаты Coords Manager'oм,как это делать писалось в первой главе,и подставил их в ко-
//манду,не забудьте про запятые между параметрами! И вот такой чувачок возле входа в дом CJ'я
//получился.
Model.Destroy(#FAM1) // удаляем модель из памяти
end_thread // И заканчиваем наш поток.

Потренеруйтесь,меняя координаты актёра,меняя его модель,увеличиваяя кол-во актёров.

Вот типы актёров,которые есть в игре:
0 - Игрок 1
1 - Игрок 2
2 - Игрок 3
3 - не используется
4 - мужчина
5 - женщина
6 - полицейский
7 - гангстер 1
8 - гангстер 2
9 - гангстер 3
10 - гангстер 4
11 - гангстер 5
12 - гангстер 6
13 - гангстер 7
14 - гангстер 8
15 - гангстер 9
16 - гангстер 10
17 - чувак,который продаёт наркоту
18 - врач
19 - пожарник
20 - криминал
21 - не нашёл
22 - проститутка
23 - специальный,как Смоук,Свит,Райдер и другие, которые испоьзуются в миссиях.
24 - миссия 1
25 - миссия 2
26 - миссия 3
27 - миссия 4
28 - миссия 5
29 - миссия 6
30 - миссия 7
31 - миссия 8
Тут я описал то,что можно делать с актёрами и игроком,проверки потом.

1) То,что применяется только к игроку($PLAYER_CHAR):
052C: set_player $PLAYER_CHAR drunk_visuals 100 - экран шатается,как-будто CJ пьяный.
player.CanMove($PLAYER_CHAR) = false - игрок не может двигаться(true-может,false-не может).
player.ClearWantedLevel($PLAYER_CHAR) - убрать игроку звёзды розыска.
player.Money($PLAYER_CHAR) += 1000000 - добавить игроку деньги.
0998: add respect 5 - добавляет респект(только для игрока).
0992: set_player $PLAYER_CHAR weapons_scrollable 1 - даёт игроку возможность менять оружее,
которое у него в руках(0 - не даёт,1 - даёт).
0221: set_player $PLAYER_CHAR trapped_in_car 1 - закрепляет игрока в машине,не давая
возможности выйти оттуда(если 0,то можно).

2) То,что применяется ко всем актёрам и игроку $PLAYER_ACTOR:
0503: create_rappel 27 #MODEL at 2223.5601 -1168.05 32.28 with_actor $Act -
создаёт верёвку длинной 27 с актёром $Act (#MODEL-модель актёра) в заданных кооринатах.
Actor.Health($Actor) = 1000 - устанавливает кол-во жизи у актёра.
Actor.Armour($Actor) = 150 - устанавливает кол-во брони актёра.
Actor.Angle($Actor) = 250.24 - устанавливает угол поворота актёра.
01B2: give_actor $Actor weapon 38 ammo 2000 - даёт актёру оружее,сначало загрузите модель.
Цифра 38-это номер оружия,номера можно посмотреть в главе "Пикапы (Pickups)",модели там же.
0555: remove_weapon 38 from_actor $Actor - забирает у актёра оружее (#MINIGUN).
actor.DestroyInstantly($Actor) - уничтожает актёра.
0819: $Dist = actor $PLAYER_ACTOR distance_from_ground - записывает в переменную $Dist рас-
// стояние между актёром и землёй
054A: set_actor $Actor immune_to_car_headshots 1 // устанавливает актёру иммунитет от выс-
// трелов в голову из машины.
$Car = Actor.Car($Actor) - заносит в переменную $Car имя машины актёра $Actor.
actor.PutAt($Actor,1234.0,-189.0,36.0) - перемещает актёра $Actor в заданные координаты.
05D1: AS_actor $Actor drive_car $Car to 1234.0 -189.0 36.0 speed 15.0 0 0 0 -актёр $Actor
садится в машину $Car и едет в заданную точку(X,Y,Z) с заданной скоростью($Speed).
05D4: AS_actor $Actor rotate_angle 175.8 - актёр поворачивается на угол.
069B: attach_object $Obj to_actor $Actor at_offset 0.0 0.0 0.0 rotation 0.0 0.0 0.0 -
прицепляет к актёру объект на опред. расстоянии от цетра актёра и под опред. углом.
0672: AS_actor $Actor attack_car $Car- актёр атакует машину.
0850: (unknown) $Act1 $Act2-актёр один следует за актёром два.
04EB: AS_actor $Actor crouch 1-актёр приседает,если 1,то присел,0-встал.
0332: set_actor $Actor bleeding_to 1 -актёр истекает кровью(1-истекает,0-не истекает).
06BA: unknown_action_sequence $Actor 1234.0,-189.0,36.0 - актёр смотроит в точку .
04C4: create_coordinate $1 $2 $3 from_actor $Actor offset 10.0 12.6 3.0 - создаёт точку с
координатами $1 $2 $3 от актёра на заданном расстоянии по координатным осям.
actor.StorePos($Actor,$1,$2,$3) - записывает координаты актёра в переменные $1,$2,$3.
011A: set actor $Actor flags 64 - задаёт актёру флаги.
03FE: set actor $Actor money 0 - устанавливает кол-во денег актёру.
05CD: AS_actor $Actor exit_car $Car - актёр выходит из машины.
054A: set_actor $Actor immune_to_car_headshots 0 -устанавливает иммунитет к headshot'у.
0631: put_actor $Actor in_group $PLAYER_GROUP - устанавливает актёру принадлежность к группе
игрока.
Actor.WeaponAccuracy($Actor) = 95 - устанавливает точность стрельбы(проценты).
089E: $X $Y $Z radius 5.0 $Actor- выбрать произвольного актёра из точки с радиусом
091C: $Actor = get_random_actor_from $X $Y $Z radius 9.5 model #FAM1 anim "BOMBER" - получить
любого актёра из точки с радиусом,с определённой моделью и анимацией.
0432: $Act = get actor handle from car $Car passenger 0 - записывает в переменную $Act актё-
ра,который сидит на месте пассажира № 0(0-около водителя,1 и 2-на заднем сидении).
05CA: AS_actor $Actor enter_car $Car passenger_seat 0 10000 ms - актёр садится в машину на
место возле водителя за 10000 миллисекунд (10 секунд).
09B8: create_blood_gush_at $X_1 $Y_1 $Z_1 offset 1.0 1.0 0.2 density 20 on_actor $Actor -
создание кровавого пятна на актёре .
07A5: unknown_action_sequence $Act1 $Act2 1500 - актёр 1 атакует актёра 2 опред.время.
05E2: actor $act1 kill_actor $act2 - актёр 1 убивает актёра 2.
0639: AS_actor $act1 rotate_to_actor $act2 - актёр 1 поворачивается и смотрит на актёра 2.
0967: actor $Actor move_mouth 40000 ms - актёр разговаривает (шевелит губами) опр. время.
0968: actor $Actor stop_mouth - актёр перестаёт разговаривать.
08E5: $Actor = get_created_actor_from_point $X $Y $Z radius 24.0 - получить актёра,который
только что появился в точке с заданным радиусом.
06A9: AS_actor $Actor look_at_point -1464.3199 1556.6899 1051.75 6000 ms - заставляет актёра
смотреть в определённую точку.
0464: put_actor $Actor into_turret_on_car $Car at_car_offset -1.0 0.1 0.7 position 0.
shooting_angle 270.0 with_weapon 38 - помещает актёра в машину,давая возможность стрелять
из неё.-1.0 0.1 0.7-это координаты,относительно геом. центра машины,в которые будет помещён
актёр,270.0 - это угол обзора актёра,38-оружее,с которым он будет сидеть,не забудьте за-
грузить модель оружия.
marker.CreateAboveActor($mark,$Act) - создаёт маркер с названием $mark над актёром $Act.
05BB: AS_actor $Actor fall_down 0 time_on_ground -1 - актёр падает на землю,как-будто его
прибили и практически сразу встаёт(от изменения параметров ничего не будет).
0729: AS_actor $Actor hold_cellphone 1 - анимация телефона (1-прикладывает,0-убирает),но
сначало надо загрузить модель #CELLPHONE,иначе актёр к уху приложит только руку.
062A: change_stat 24 to 1000 - изменяет статистику игрока.О статистиках написано в главе
"Статистики".
0376: $Actor = create_random_actor -2107.7 155.1 8.0 - создёт случайного игрока.
087E: set_actor $Actor weapon_droppable 0 - актёр оставляет (не оставляет) оружее после
смерти.
0321: kill_actor $Actor - убивает актёра.
05BC: AS_actor $Actor jump 0 - актёр прыгает,0-стиль прыжка,есть и 1,но особого отличия не
видно.
actor.SetImmunities($Actor,1,1,1,1,1) - устанавливает актёру определённые имунитеты,тут
первая цифра - защита от пуль, вторая - от огня, третья - от взрывов, четвертая - от
оружия ближнего боя,а вот пятая наверно от падения.
07FE: set_actor $Actor fighting_style_to 5 6 - устанавливает актёру стиль борьбы,по идее в
игре много стилей,но в оригинальном main'e встречаются только 5-6,6-6 и 7-6.
08C6: set_actor $Actor stay_on_bike 1 - актёр не может упасть с байка никаким образом,если
поставить 0 , то может.
05C9: AS_actor $Actor on_guard -1 ms - заставляет актёра быть охранником,типа как в казино.
081A: $Actor 2 - даёт актёру возможность ходить с двумя оружиями сразу.
06B0: AS_actor $Actor sit_down 99999999 ms - актёр сидит опред. время.
05C5: AS_actor $Actor cower 10000 ms - актёр пятиться назад опред. время.
06E3: AS_actor $Actor roll_sideways 1 - актёр идёт в бок или что-то типа этого.
0672: AS_actor $Actor attack_car $Car - актёр атакует машину.
0677: AS_actor $Act1 chat_with_actor $Act2 1 1 - актёр1 разговаривает с актёром2
0467: clear_actor $Actor last_weapon_damage - убирает повреждения,нанесённые актёру в пос-
// ледний раз.
05BA: AS_actor $Actor chew_gum 40000 ms - актёр жуёт жвачку опред.время(временами не жуёт).
0638: AS_actor $Actor stay_put 1 - актёр остаётся на месте,чтобы ему не приказали.
0245: set_actor $Actor walk_style_to "FATMAN" - стиль походки актёра,в оригинальном main'e
есть следующие стили походки:
"FATMAN" - толстяк
"GANG1" - гангстер 1
"GANG2" - гангстер 2
"MAN" - мужчина
"WOMAN" - женщина
"BLINDMAN" - слепой мужчина
"SEXYWOMAN" - сексуальная женщина
"DRUNKMAN" - алкаш

Рассмотрим проверки,которые можно применять к актёрам и игроку,т.е. к CJ'ю:

Игрок ($PLAYER_CAHR):

Player.Defined($PLAYER_CAHR) - игрок найден или уже создан.
player.PressingHorn($PLAYER_CAHR) - игрок бибикает,сидя в машине.
wasted_or_busted - игрок арестован или убит.
Player.Controllable($PLAYER_CHAR) - игрок контролируем.
0457: player $PLAYER_CHAR aiming_at_actor $Act - игрок целится в актёра c именем $Act.
Player.WantedLevel($PLAYER_CHAR) > 0 - проверяет уровень розыска у игрока.
Player.Money($PLAYER_CHAR) > $money - cравнивает ваши деньги с целым числом $money.

Игрок ($PLAYER_ACTOR) и актёры:

Actor.Animation($PLAYER_ACTOR) == "FIGHTC_SPAR" - является ли анимация актёра данной.
0965: actor $PLAYER_ACTOR swimming_in_water - актёр плавает в воде.
06EE: actor $PLAYER_ACTOR in_group 260@ - актёр в определённой группе актёров.
actor.InCar($PLAYER_ACTOR,$Car) - $PLAYER_ACTOR в машине $Car.
actor.Driving($PLAYER_ACTOR) - актёр $PLAYER_ACTOR за рулём.
actor.DrivingPoliceVehicle($PLAYER_ACTOR) - актёр $PLAYER_ACTOR за рулём ментовской тачки.
actor.DrivingTaxiVehicle($PLAYER_ACTOR) - актёр $PLAYER_ACTOR за рулём такси.
04A7: actor $PLAYER_ACTOR driving_boat - актёр $PLAYER_ACTOR плывёт на лодке.
actor.DrivingVehicleType($ACTOR,#CAR_MODEl)-актёр $ACTOR в маш. типа #CAR_MODEl.
actor.Dead($PLAYER_ACTOR) - актёр $PLAYER_ACTOR умер.
actor.HasWeapon($ACTOR,Number) - актёр $ACTOR имеет оружее с номером Number, номера
можно посмотреть в главе "ПикАпы (PickUps)".
actor.Stopped($PLAYER_ACTOR) - актёр $PLAYER_ACTOR остановился.
actor.Dead($PLAYER_ACTOR) - актёр $PLAYER_ACTOR умер.
04AD: actor $PLAYER_ACTOR touching_water - актёр $PLAYER_ACTOR касается воды.
04C5: actor $PLAYER_ACTOR photographed - актёр фотографирует.
051A: actor $Act1 damaged_by_actor $Act2 - получил ли актёр1 к-л повреждения от актёра2
031D: actor $Act hit_by_weapon 23 - получил ли актёр к-л повреждения от опред. оружия

Ещё актёрам можно присваивать сложные анимации,о них в главе "Анимации для актёров".

На основе нескольких из написанных мною команд давайте теперь создадим телохранителя с
шестистволкой,который будет охранять вас от нападающих и будет атаковать тех,на кого напада-
ете вы.Для этого нам понадобятся ещё 3 команды,что они точно означают я не знаю,но их надо
ставить для эффективности охранника.Вот они:
0568: (unknown) $Actor 1
08AF: (unknown) $Actor 1000
077A: (unknown) $Actor 4 25
А вот и сам код охранника:

create_thread @MyGuarder

:MyGuarder
wait 0
model.load(#FAM1)
model.load(#MINIGUN)
038B: load_requested_models

:MyGuarder_2
wait 100
if and
model.Available(#FAM1)
model.Available(#MINIGUN)
jf @MyGuarder_2
wait 5000
04C4: create_coordinate $X1 $Y1 $Z1 from_actor $PLAYER_ACTOR offset 0.0 5.0 0.0
actor.Create(1@,4,#FAM1,$X1,$Y1,$Z1)
0568: (unknown) 1@ 1
0446: set_actor 1@ immune_to_headshots 0
08AF: (unknown) 1@ 1000
077A: (unknown) 1@ 4 25
0631: put_actor 1@ in_group $PLAYER_GROUP
01B2: give_actor 1@ weapon 38 ammo 6000
Actor.WeaponAccuracy(1@) = 90
Actor.Health(1@) = 2000

:MyGuarder_3
wait 0
if or
wasted_or_busted
actor.dead(1@)
jf @MyGuarder_3
actor.DestroyInstantly(1@)
model.destroy(#FAM1)
model.destroy(#MINIGUN)
wait 10000
jump @MyGuarder

Вот Вам ещё полезная вещь - данным кодом можно заставить актёра из туррета атаковать игрока
и всю его команду из туррета машины:

060A: unknown_create_entity 2 1@
$Actor = Actor.Create(Mission4, #SWAT, 2161.8401, -1154.26, 25.09)
077A: (unknown) $Actor 4 23
077A: (unknown) $Actor 4 0
060B: unknown_actor_use_entity $Actor 1@
0464: put_actor $Actor into_turret_on_car $Car at_car_offset 1.4 1.3 -0.1 position 3 shooting_angle 190.0 with_weapon 29
07DD: (unknown) $Actor 70



Сообщение отредактировал SAIFER-23RUS - Понедельник, 08.10.2012, 16:27
 
Форум » Моды GTA SA, читы для samp » CLEO программирование » CLEO уроки » Урок №4 Создание актёров
  • Страница 1 из 1
  • 1
Поиск:

Вверх