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
|
|
| |