[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » GTA Модинг » Обучение Скриптингу » Скриптинг для ГТА Сан-Андреас. С чего начать? (Вот, решил написать статью)
Скриптинг для ГТА Сан-Андреас. С чего начать?
Den_spbДата: Воскресенье, 14.06.2009, 04:18 | Сообщение # 1
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Скриптинг для ГТА Сан-Андреас. С чего начать?

Статья предназначена для тех, кто хочет научиться писать скрипты к этой игре, но не знает, с чего начать. Есть 2 подвида скриптинга – редактирование файла main.scm (файла, в котором прописаны все миссии игры) и CLEO-скриптинг. Многие, в том числе и я, пишут CLEO скрипты. Такой вариант удобен тем, что после установки нового скрипта не нужно начинать новую игру. Для того, чтобы можно было устанавливать CLEO скрипты, надо сначала установить библиотеку CLEO с сайта cleo.sannybuilder.com. Чтобы установить CLEO скрипт, нужно кинуть скомпилированный файл (cs-файл) в папку GTA_San_Andreas /CLEO. Чтобы удалить любой ранее установленный скрипт, достаточно удалить соответствующий файл из папки CLEO.

Sanny Builder. Компиляция и декомпиляция.
СБ - это программа, необходимая для написания и редактирования скриптов. Скачать ее можно с сайта sannybuilder.com. Кстати, при установке СБ, можно заодно установить и CLEO, либо в другой удобный момент, нажав кнопку CLEO в правом нижнем углу окна программы. Чтобы создать скомпилированный, готовый к установке, скрипт, надо запустить СБ и применить команду Файл-Создать. Затем можно писать код (или скопировать и вставить какой-то готовый код). После того, как код написан, надо нажать команду Запуск-Компилировать, ввести произвольное имя и нажать ОК. В результате в указанном месте сохранятся 2 файла с одинаковым именем, но разным расширением – txt и cs. В текстовом файле будет записан код скрипта (исходник), второй файл – скомпилированный скрипт. Его можно кинуть в папку CLEO. Если вы захотите внести изменения в свой скрипт, то нужно открыть его исходник (Файл-Открыть), внести соответствующие изменения, после чего перекомпилировать скрипт (Запуск-Компилировать).
Теперь обратная ситуация – у вас есть какой-то скомпилированный скрипт (cs файл) и вам нужно получить его код (исходник), например для изучения. Для этого примените команду Запуск-Декомпилировать и укажите путь к файлу. В окне программы появится код скрипта, при этом в соответствующем месте будет создан текстовый файл скрипта (исходник).
К СБ прилагается справка – это учебник по скриптингу. О типах данных, переменных и т.п. вы можете прочитать в разделе Кодинг. В разделе Статьи вы можете посмотреть примеры несложных скриптов на различные темы. Так же будет полезно изучить материалы из раздела Документация по SCM – ГТА СА.

Кодинг. Опкоды и комментарии
Код скрипта состоит из команд (опкодов). Команды записываются по порядку – сверху вниз, в одной строчке – одна команда. В игре команды будут выполняться в том же порядке, в каком они перечислены в коде. Кроме команд в коде часто прописывают комментарии. Комментарии нужны только для того, чтобы сделать код скрипта более наглядным. В процессе компиляции комментарии игнорируются. Оформляются комментарии либо двумя наклонными чертами (//комментарий), либо фигурными скобками ({комментарий}). Если использовать 2 наклонные черты, то будет закомментировано всё, что написано до конца данной строки. Если использовать фигурные скобки, то будет закомментировано всё, что записано между двумя скобками. Комментарии в тексте кода выделяются синим цветом.
Пример из кода:
//Здесь можно писать что угодно, потому что это – комментарий
{другой вариант
оформления комментария}

Параметры опкодов. Целые и дробные десятичные числа.
Возвращаемся к опкодам. Большинство опкодов имеют параметры. Если вы возьмете какой-либо скрипт и декомпилируйте его, то, благодаря функции подсветки кода, вы увидите, что опкоды написаны шрифтом черного цвета, а параметры будут выделены различными цветами. При добавлении команд в код допускается менять только параметры. В качестве параметров в большинстве случаев выступают числа (выделяются бордовым цветом) или переменные (выделяются ярко-синим цветом). Что касается чисел, то в основном применяются обычные десятичные числа. Они бывают целыми (без точки) – integer и дробными (с точкой) – float. Какой тип числа должен быть – это зависит от опкода. Целыми числами в игре выражаются время, здоровье игрока, количество денег игрока и др. Дробными числами выражаются расстояния между объектами, углы, скорости транспортных средств и др. Для примера приведу команду ожидания (wait). Параметр для нее выражается в миллисекундах (тысячных долях секунды) и является целым числом. Смысл этой команды состоит в том, что выполнение скрипта приостановится на указанное время.
Пример:
wait 3000 // выполнение скрипта приостановится на 3 секунды

Начало и окончание CLEO кода
Клео-скрипт начинаем всегда так:
{$CLEO}
wait 0
Первая команда называется директивой. Если ее не написать, то при компиляции будет создан scm файл, а нужен cs. Хотя директива и заключена в фигурные скобки, комментарием она не является. Далее обычно следует нулевое ожидание. Казалось бы, что эта команда бессмысленна, но если ее не написать, то при компиляции может появиться отчет об ошибке. Далее пишем основной код и завершаем скрипт опкодом:
0A93: end_custom_thread
То есть простейший скрипт выглядит так:
{$CLEO}
wait 0
0A93: end_custom_thread
Обычно после нулевого ожидания пишут проверку на существование игрока – об этом ниже.

Переменные
Переменные используются для хранения каких-либо данных. Можно читать их значения или записывать в них новые. Переменные бывают двух типов: глобальные и локальные. В переменную можно записать не только обычное число, но, например и указатель на какой-либо игровой объект (актер, транспорт и др.). Глобальные переменные обозначаются так:
$IMYA_PEREMENNOI
Локальные переменные: 0@ , 1@ , 2@ , 3@ …
ВАЖНО: в клео-скриптах, как правило, используем только локальные переменные. Исключения есть, но их немного, например переменные игрока (CJ-я): $PLAYER_ACTOR и $PLAYER_CHAR (какую из этих переменных надо использовать – зависит от опкода). В одном CLEO скрипте можно использовать до 32 локальных переменных (0@, 1@, 2@ .. 31@). Переменные 32@ и 33@ - это таймеры. Числовое значение, записанное в них, автоматически увеличивается с каждой миллисекундой на единицу.
Запись числового значения в переменную осуществляется просто:
0@ = 1 // в переменную 0@ записано целое число - 1
1@ = 1.0 // в переменную 1@ записано дробное число – 1.0 (дробное т.к. с точкой)
Записав однажды в переменную, например целое число, дальше мы можем записывать в нее другие значения, но они должны быть того же типа (тип в данном случае – целое число).
Чтобы в переменную можно было записывать данные другого типа, ее необходимо переобъявить. Об этом можете почитать в разделе Кодинг-Переменные, хотя переобъявление в скриптинге используется нечасто.
Кстати, есть опкоды для записи значения одной переменной в другую переменную. Пример:
12@ = 1
0085: 13@ = 12@ // (int)
Как определить, что делает данный опкод? В скриптинге СЛЕВА от знака равно стоит то, КУДА записываем, СПРАВА стоит то, ЧТО записываем. В примере в переменную 13@ скопировано значение переменной 12@, т.е. 1. В комментарии написано int (integer), следовательно данный опкод можно использовать, если в переменных записаны целые числа.
Арифметические действия с переменными записываются так:
0@ += 2 // прибавление целого числа к значению переменной
0@ *= 2 // умножение значения переменной на целое число
0@ /= 3 // деление значения переменной на целое число
0@ += -2 //вычитание целого числа из значения переменной
Для дробных чисел всё точно также, только числа будут с точками.
Домашнее задание: найдите ошибки в скрипте. Всего там 3 ошибки.
{$CLEO}
wait 0
0@ += 1
0@ = 9
wait 1000
0@ += 15
1@ = 1000
1@ *= 2.258
2@ = 2
0087: 3@ = 2@ // (float)
0A93: end_custom_thread

Опкоды действия и условные опкоды
Большинство опкодов можно разделить на 2 большие группы. С помощью одних опкодов мы что-то проверяем – это условные опкоды (или просто - проверки). С помощью других опкодов мы что-то делаем, производим какие-то действия – это опкоды действия. Любой опкод можно найти через поиск опкодов в СБ – Сервис-Инструменты-ПоискОпкодов. Некоторые наиболее часто употребляемые проверки с описанием можно найти в справке СБ – Статьи-УсловныеОпкоды.

Метки и переходы
Метки используются почти во всех скриптах.
Обозначение:
:ImyaMetki
Команда «перейти на метку с именем ImyaMetki»:
jump @ImyaMetki
Принцип очень простой. Если выполнение кода дойдет до строчки, в которой написана команда перехода на какую-то метку, то дальше код будет выполняться со строчки, в которой записана эта метка. После каждой метки надо писать ожидание (хотя бы нулевое), иначе игра может зависнуть. Пример:
{$CLEO}
wait 0
:0
wait 0
jump @1
0@ = 1
:1
wait 0
jump @0
Такой код будет выполняться бесконечно, поэтому здесь опкод окончания скрипта не нужен. Команда 0@ = 1 никогда не будет выполнена, несложно понять почему.

Условия
Условие записывается так – сначала кодовое слово if (если), потом условный опкод, потом команда перехода на метку. Выше я показал команду перехода на метку, если условие верно. Есть еще команда перехода на метку, если условие ложно:
jump_if_false @imya_metki // перейти на метку imya_metki если условие ложно. Можно записать короче – jf.
Если в переменных записаны числа, то проверки выглядят так:
0@ == 1 // значение переменной равно 1
0@ > 1
0@ < 1
0@ <> 1 // значение переменной не равно 1
Не забываем, что если используем дробные числа, то они должны быть с точками.
Простейший пример – значение переменной 0@ будет с каждой секундой увеличиваться на 1 до тех пор, пока не достигнет 50.
{$CLEO}
wait 0
0@ = 0
:0
wait 1000 // ждем секунду
0@ += 1 // прибавляем единицу
if // если
0@ == 50 // значение в переменной - 50
jf @0 // условие ложно, тогда переходим на метку :0
0A93: end_custom_thread
Я показал как проверить какое-то одно условие. Но можно проверить и несколько условий одновременно:

а) проверка одновременного выполнения всех условий
Всё делается точно также, как я описал выше, но вместо if пишется if and , далее перечисляются проверяемые условия (максимум 7 условий, если не ошибаюсь).
Пример кода – если значения переменных 1@ и 2@ больше 100 , то запишем в обе переменные ноль:
{$CLEO}
wait 0
1@ = 0
2@ = -10
:0
wait 0
1@ += 2
2@ += 3
if and
1@ > 100
2@ > 100
jf @0
1@ = 0
2@ = 0
0A93: end_custom_thread

б) проверка выполнения любого условия из нескольких
Вместо if and здесь используется if or. Для примера возьмем такой код – если В ОДНОЙ из двух переменных записано число 10.0 , то запишем в обе переменные число 100.0.
{$CLEO}
wait 0
1@ = 0.0
2@ = -4.1
:0
wait 0
1@ += 0.1
2@ += 0.1
if or
1@ == 10.0
2@ == 10.0
jf @0
1@ = 100.0
2@ = 100.0
0A93: end_custom_thread
Домашнее задание со звездочкой: напишите скрипт, решающий такую же задачу, но вместо проверки выполнения любого условия используйте проверку выполнения всех условий.
Еще один простой пример на условия, уже не с числами:
{$CLEO}
wait 0
:0
wait 0
if // если
0256: player $PLAYER_CHAR defined // игрок (Сиджей) существует
jf @0 // если условие ложно (игрок не существует), то возвращаемся на метку :0
010D: set_player $PLAYER_CHAR wanted_level_to 0 {уровень интереса полиции к игроку делаем нулевым}
jump @0
Данный код делает так, что игроком никогда не интересуется полиция.
Здесь команду окончания скрипта опять не используем, т.к. код будет выполняться бесконечно (скрипт зациклен). Здесь вы видите проверку на то, существует игрок или нет.
Ну вот и всё, что я хотел рассказать. Изучайте справку к СанниБилдеру (Кодинг я вам вкратце пересказал, читайте разделы Статьи и Документация по СКМ – ГТА СА).

 
TerminAtor78Дата: Воскресенье, 14.06.2009, 04:46 | Сообщение # 2
Имиджмэйкер
Группа: Проверенные
Сообщений: 1683
Статус: Offline
Quote (Den_spb)
Ну вот и всё, что я хотел рассказать. Изучайте справку к СанниБилдеру

Попробуем. Но если честно, мне просто лень. biggrin


Желание вызвать восхищение или жалость –
вот что нередко составляет основу нашей откровенности.

Л.Ф.
 
TDURazorДата: Воскресенье, 14.06.2009, 08:54 | Сообщение # 3
Выпускник
Группа: Проверенные
Сообщений: 103
Статус: Offline
Den_spb,
Хорошая статья...респект
буду пополнять навыки


See No Evil
 
Санёк1998Дата: Воскресенье, 14.06.2009, 11:33 | Сообщение # 4
Школьник II
Группа: Проверенные
Сообщений: 80
Статус: Offline
Помогите пожалуйста со скриптом!Что в нём не так?
//This script was created by 'GTA: San Andreas Race-Mission Creator'
//14.06.2009 12:30:13

:RaceMission1
$RaceMis1StartX = 783,59 // floating-point values
$RaceMis1StartY = 587,17 // floating-point values
$RaceMis1StartZ = 11,66 // floating-point values
$11192 = Marker.CreateIconAndSphere(53, $RaceMis1StartX, $RaceMis1StartY, $RaceMis1StartZ)

:RaceMission1_1349
wait 25 ms
if
Player.Defined($PLAYER_CHAR)
jf @RaceMission1_1349
if
0103: actor $PLAYER_ACTOR stopped_near_point_in_car $RaceMis1StartX $RaceMis1StartY $RaceMis1StartZ radius 4.0 4.0 4.0 sphere 0
jf @RaceMission1_1349
if
Player.Controllable($PLAYER_CHAR)
jf @RaceMission1_1349
if
$ONMISSION == 0 // integer values
jf @RaceMission1_1349
Marker.Disable($11192)
054C: use_GXT_table 'RACETOR'
00BA: text_styled 'RACES_0' 1500 ms 2 // Races
0169: set_fade_color 0 0 0
fade 0 2500

:RaceMission1_1492
wait 0 ms
if
not fading
jf @RaceMission1_1492
00BE: text_clear_all
03E6: remove_text_box
start_mission 1
end_thread

//-------------Mission 1---------------

:RaceMission1_000
thread 'RACEMS1'
gosub @RaceMission1_47
if
wasted_or_busted
jf @RaceMission1_38
gosub @RaceMission1_2497

:RaceMission1_38
gosub @RaceMission1_2762
end_thread

:RaceMission1_47
increment_mission_attempts
$ONMISSION = 1 // integer values
Player.ClearWantedLevel($PLAYER_CHAR)
00BE: text_clear_all
$a0 = 0 // integer values
$a1 = 1 // integer values
$a2 = 2 // integer values
$a3 = 3 // integer values
$a4 = 4 // integer values
$a5 = 5 // integer values
$a6 = 6 // integer values
$a7 = 7 // integer values
$a8 = 8 // integer values
$a9 = 9 // integer values
$a10 = 10 // integer values
$a11 = 11 // integer values
$a12 = 12 // integer values
var
$money : integer = 100000
$traff : float = 1.0
$a : integer = 3
$ak : integer = 2
$b : integer = 4
$d : integer = 0
end
var
$nar : integer
$tar : integer
$time : float = 0.0
$dist : float
$dist2 : float
$pos : integer = 1
$pos2 : integer = 1
$stage : array 7 of integer
$car : array 7 of car
$model : array 7 of integer
$act : array 7 of actor
$mark : array 7 of marker
$carx : array 7 of float
$cary : array 7 of float
$carz : array 7 of float
$angle : array 7 of float
$pointx : array 12 of float
$pointy : array 12 of float
$pointz : array 12 of float
$speed : array 12 of float
$type : array 12 of integer
end
for $par = 1 to $a
$stage[$par] = 1
end
$pointx[$a1] = 244,23 // floating-point values
$pointy[$a1] = 788,01 // floating-point values
$pointz[$a1] = 11,67 // floating-point values
$speed[$a1] = 1.0 // floating-point values
$type[$a1] = 2 // integer values
$pointx[$a2] = 41,84 // floating-point values
$pointy[$a2] = 867,13 // floating-point values
$pointz[$a2] = 11,66 // floating-point values
$speed[$a2] = 1.0 // floating-point values
$type[$a2] = 2 // integer values
$pointx[$a3] = -109,98 // floating-point values
$pointy[$a3] = 923,56 // floating-point values
$pointz[$a3] = 11,66 // floating-point values
$speed[$a3] = 1.0 // floating-point values
$type[$a3] = 2 // integer values
$pointx[$a4] = -358,27 // floating-point values
$pointy[$a4] = 972,77 // floating-point values
$pointz[$a4] = 11,66 // floating-point values
$speed[$a4] = 1.0 // floating-point values
$type[$a4] = 2 // integer values
$carx[$a1] = 776,83 // floating-point values
$cary[$a1] = 583,73 // floating-point values
$carz[$a1] = 11,66 // floating-point values
$angle[$a1] = 62,47 // floating-point values
$carx[$a2] = 775,87 // floating-point values
$cary[$a2] = 577,47 // floating-point values
$carz[$a2] = 11,66 // floating-point values
$angle[$a2] = 68,57 // floating-point values
$carx[$a3] = 805,60 // floating-point values
$cary[$a3] = 574,54 // floating-point values
$carz[$a3] = 11,66 // floating-point values
$angle[$a3] = 69,38 // floating-point values
$model[$a1] = #COPCARRU
$model[$a3] = #COPCARRU
054C: use_GXT_table 'RACETOR'
for $par = 1 to $a
Model.Load($model[$par])
end
wait 1000 ms

:RaceMission1_111
wait 0 ms
for $par = 1 to $a
if
Model.Available($model[$par])
jf @RaceMission1_111
end
01EB: set_traffic_density_to 0.0
0395: clear_area 1 at $carx[$ak] $cary[$ak] $carz[$ak] range 300.0
for $par = 1 to $a
if
$par == $ak
then
$car[$ak] = Actor.Car($PLAYER_ACTOR)
Car.PutAt($car[$ak], $carx[$par], $cary[$par], $carz[$par])
Car.Angle($car[$ak]) = $angle[$ak]
wait 500 ms
Continue
end
$car[$par] = Car.Create($model[$par], $carx[$par], $cary[$par], $carz[$par])
Car.Angle($car[$par]) = $angle[$par]
Car.SetImmunities($car[$par], 1, 1, 1, 1, 1)
01EC: make_car $car[$par] very_heavy 1
07EE: car $car[$par] enable_tire_marks 1
Car.DoorStatus($car[$par]) = 2
if
$par <> $ak
then
0560: $car[$par] = create_random_driver_in_vehicle $act[$par]
end
end
0407: create_coordinate $camx $camy $camz from_car $car[$ak] offset 0.0 -23.7 14.1
Camera.SetPosition($camx, $camy, $camz, 0.0, 0.0, 0.0)
Camera.OnVehicle($car[$ak], 15, 1)
Player.CanMove($PLAYER_CHAR) = False
03BF: set_player $PLAYER_CHAR ignored_by_everyone_to 1
03F4: set_all_vehicles_apply_damage_rules 0
wait 2500 ms
fade 1 1000
wait 1000 ms
00BA: text_styled 'RACES_4' 1100 ms 4 // 3
097A: at 0.0 0.0 0.0 play_sound 1056
wait 1100 ms
0407: create_coordinate $camx2 $camy2 $camz2 from_car $car[$ak] offset 0.0 -13.7 7.1
Camera.SetPosition($camx2, $camy2, $camz2, 0.0, 0.0, 0.0)
Camera.OnVehicle($car[$ak], 15, 1)
0460: set_camera_pointing_time 0.0 2000
00BA: text_styled 'RACES_5' 1100 ms 4 // 2
097A: at 0.0 0.0 0.0 play_sound 1056
wait 1100 ms
0407: create_coordinate $camx3 $camy3 $camz3 from_car $car[$ak] offset 0.0 -6.7 3.1
Camera.SetPosition($camx3, $camy3, $camz3, 0.0, 0.0, 0.0)
Camera.OnVehicle($car[$ak], 15, 1)
0460: set_camera_pointing_time 0.0 2000
00BA: text_styled 'RACES_6' 1100 ms 4 // 1
097A: at 0.0 0.0 0.0 play_sound 1056
wait 1100 ms
00BA: text_styled 'RACES_7' 800 ms 4 // GO!
097A: at 0.0 0.0 0.0 play_sound 1057
01BD: 11@ = current_time_in_ms
Player.CanMove($PLAYER_CHAR) = True
03BF: set_player $PLAYER_CHAR ignored_by_everyone_to 0
03F4: set_all_vehicles_apply_damage_rules 1
01EB: set_traffic_density_to $traff
Camera.SetBehindPlayer
Camera.Restore
for $par = 1 to $a
if
$par <> $ak
then
05D1: AS_actor $act[$par] drive_vehicle -1 to $pointx[$a1] $pointy[$a1] $pointz[$a1] speed $speed[$a1] $type[$a1] 0 2
$mark[$par] = Marker.CreateAboveCar($car[$par])
Marker.SetColor($mark[$par], 2)
Marker.SetIconSize($mark[$par], 2)
end
end
03C3: set_timer_with_text_to $time type 0 text 'TIMER' // TIME
for $kar = 1 to $b
$nar = $kar // integer values
$nar += 1 // integer values
018A: $chekp = create_checkpoint_at $pointx[$kar] $pointy[$kar] $pointz[$kar]
0168: show_on_radar $chekp 4
if
$kar == $b // integer values
then
Marker.SetColor($chekp, 0)
$a0 = 1 // integer values
end
06D5: $rchekp = create_racing_checkpoint_at $pointx[$kar] $pointy[$kar] $pointz[$kar] point_to $pointx[$nar] $pointy[$nar] $pointz[$nar] type $a0 radius 6.0
while 8100: not actor $PLAYER_ACTOR near_point_in_vehicle $pointx[$kar] $pointy[$kar] $pointz[$kar] radius 12.0 12.0 12.0 sphere 0
gosub @RaceMission1_211
03F0: toggle_text_draw 0
$pos2 = $pos // integer values
0340: set_text_draw_color 134 155 184 255
0349: text_draw_style = 1
033F: set_text_draw_letter_width_height 1.0 3.6
0341: unknown_text_stuff 3
0342: set_text_draw_centered 1
0343: set_text_linewidth 640.0
060D: draw_text_shadow 2 color 0 0 0 alpha 180
038E: draw_box position 570.7242 356.2812 scale 68.2072 48.2072 color 0 0 0 alpha 255
038E: draw_box position 570.7242 356.2812 scale 66.2072 46.2072 color 134 155 184 alpha 255
038E: draw_box position 570.7242 356.2812 scale 62.2072 42.2072 color 0 0 0 alpha 255
045A: text_draw_1number 570.0 339.0 'RACES44' $pos2 // ~1~TH
$pos = 1 // integer values
if
not Actor.InCar($PLAYER_ACTOR, $car[$ak])
then
jump @RaceMission1_2497
end
if or
01F4: vehicle $car[$ak] flipped
02BF: car $car[$ak] sunk
then
Car.StorePos($car[$ak], $xpos, $ypos, $zpos)
02C1: set $xpos $ypos $zpos to_car_path_coords_closest_to $xpos $ypos $zpos
Car.PutAt($car[$ak], $xpos, $ypos, $zpos)
end
wait 0 ms
end
Marker.Disable($chekp)
06D6: delete_racing_checkpoint $rchekp
097A: at 0.0 0.0 0.0 play_sound 1058
end
jump @RaceMission1_2491

:RaceMission1_211
for $ind = 1 to $a
if
$ind <> $ak // integer values
then
if
$car[$ind] <> -1
then
if
$stage[$ind] <= $b
then
$tar = $stage[$ind]
if
0100: actor $act[$ind] near_point_in_vehicle $pointx[$tar] $pointy[$tar] $pointz[$tar] radius 12.0 12.0 12.0 sphere 0
then
$stage[$ind] += 1
if
$stage[$ind] <= $b
then
$tar = $stage[$ind]
05D1: AS_actor $act[$ind] drive_vehicle $car[$ind] to $pointx[$tar] $pointy[$tar] $pointz[$tar] speed $speed[$tar] $type[$tar] 0 2
end
end
if
$kar == $stage[$ind]
then
Car.StorePos($car[$ak], $xpos, $ypos, $zpos)
0509: $dist = distance between point $xpos $ypos and point $pointx[$kar] $pointy[$kar]
Car.StorePos($car[$ind], $xpos2, $ypos2, $zpos2)
0509: $dist2 = distance between point $xpos2 $ypos2 and point $pointx[$kar] $pointy[$kar]
if
$dist > $dist2
then
$pos += 1
end
else
if
$stage[$ind] > $kar
then
$pos += 1
end
end
else
$pos += 1
end
if or
Car.Wrecked($car[$ind])
02BF: car $car[$ind] sunk
not Actor.Driving($act[$ind])
then
Actor.RemoveReferences($act[$ind])
$car[$ind] = -1
Car.RemoveReferences($car[$ind])
Marker.Disable($mark[$ind])
end
end
end
end
return

:RaceMission1_2491
gosub @RaceMission1_REMOVE
if
$pos2 == 1
then
00BA: text_styled 'RACES18' 3000 ms 1 // Winner!
wait 3000 ms
01E3: text_1number_styled 'M_PASS' $money 4000 ms 1 // MISSION PASSED!~n~~w~$~1~
Player.Money($PLAYER_CHAR) += $money
01BD: 12@ = current_time_in_ms
0085: 13@ = 12@ // integer values and handles
0062: 13@ -= 11@ // integer values
13@ /= 1000.0 // floating-point values
0085: 452@ = 13@ // integer values and handles
452@ /= 60 // integer values
0085: 36@ = 452@ // integer values and handles
36@ *= 60 // integer values
0085: 453@ = 13@ // integer values and handles
0062: 453@ -= 36@ // integer values
0394: play_music 1
02FD: text_2numbers_lowpriority 'TIME' 452@ 453@ 8000 ms 1 // ~1~:~1~
else
01E3: text_1number_styled 'RACES_8' 200 5000 ms 1
01BD: 12@ = current_time_in_ms
0085: 13@ = 12@ // integer values and handles
0062: 13@ -= 11@ // integer values
13@ /= 1000.0 // floating-point values
0085: 452@ = 13@ // integer values and handles
452@ /= 60 // integer values
0085: 36@ = 452@ // integer values and handles
36@ *= 60 // integer values
0085: 453@ = 13@ // integer values and handles
0062: 453@ -= 36@ // integer values
02FD: text_2numbers_lowpriority 'TIME' 452@ 453@ 8000 ms 1 // ~1~:~1~
end
0318: set_latest_mission_passed_to 'RACES_0' // Races
Player.ClearWantedLevel($PLAYER_CHAR)
gosub @RaceMission1_38
return

:RaceMission1_2497
gosub @RaceMission1_REMOVE
00BA: text_styled 'RACES_8' 5000 ms 1 // Loser!
create_thread @RaceMission1
return

:RaceMission1_REMOVE
01EB: set_traffic_density_to 1.0
Car.DoorStatus($car[$ak]) = 0
for $par = 1 to $a
if
$par == $ak
then
wait 500 ms
Continue
end
if
$car[$par] <> -1
then
Car.SetImmunities($car[$par], 0, 0, 0, 0, 0)
Model.Destroy($model[$par])
Car.RemoveReferences($car[$par])
if
$par <> $ak
then
Marker.Disable($mark[$par])
Actor.RemoveReferences($act[$par])
end
end
end
Marker.Disable($chekp)
06D6: delete_racing_checkpoint $rchekp
03F0: toggle_text_draw 0
014F: delete_timer $time
01B7: release_weather
return

:RaceMission1_2762
$ONMISSION = 0 // integer values
mission_cleanup
return


 
Colt_8Дата: Воскресенье, 14.06.2009, 13:31 | Сообщение # 5
I LOVE GTA
Группа: Проверенные
Сообщений: 5216
Статус: Offline
TerminAtor78
Мне тоже было лень, но ты не поверишь, я себя заставил! blink haha




 
Den_spbДата: Воскресенье, 14.06.2009, 18:04 | Сообщение # 6
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
@Санек
Это не клео-скрипт, а миссия для мейна. Можно переделать в клео-миссию - для этого надо заменить глобальные переменные на локальные и сделать скрипт-стартер для этой миссии. С подобными вопросами - в "Вопросы по созданию скриптов", а здесь обсуждаем статью.


Сообщение отредактировал Den_spb - Воскресенье, 14.06.2009, 18:06
 
TIVERДата: Суббота, 20.06.2009, 18:43 | Сообщение # 7
Малый
Группа: Пользователи
Сообщений: 1
Статус: Offline
ПОДСКАЖИТЕ ПОЖАЛУЙСТА ТАМ ДЛЯ МНОГИХ МОДОВ нужна такая папка CLEO.ASI !!! а если нет её что делать? uhm
 
SergeantДата: Суббота, 20.06.2009, 18:54 | Сообщение # 8
Генерал-Профессор
Группа: Проверенные
Сообщений: 551
Статус: Offline
Quote (TIVER)
а если нет
скачать wink





 
d88Дата: Суббота, 20.06.2009, 21:18 | Сообщение # 9
Генерал Профессор
Группа: Проверенные
Сообщений: 1540
Статус: Offline
Quote (TIVER)
CLEO.ASI

Так она в моде должна быть.
Ну если нет, создай её, сунь в папку клео и положи в неё файлы из мода.
 
Den_spbДата: Суббота, 20.06.2009, 22:24 | Сообщение # 10
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Папки cleo.asi нет, у папок вообще нет расширений. Есть файл cleo.asi, он является частью cleo. Где взять и как установить cleo подробно расписал выше.

Сообщение отредактировал Den_spb - Суббота, 20.06.2009, 22:24
 
NoRVaNДата: Воскресенье, 21.06.2009, 00:07 | Сообщение # 11
Мажор
Группа: Проверенные
Сообщений: 221
Статус: Offline
Можете скриптёра сделать один скрипт я вроде всё делаю правильно всё получалось но не могу сохранить в файле CS в сани билдере можете просто сделать это очень плиз

Если едеш на машине - жми "Yes" + "Главный огонь" или "Yes" + "Дополнительный огонь", чтобы машина ехала на 2 колесах.

Вот код в сани:

Code
:WHEELIE
0001: wait 0 ms
00D6: if 4
0256: player $PLAYER_CHAR defined
00DF: actor $PLAYER_ACTOR driving
84C8: NOT $PLAYER_ACTOR ; not samolet
84A9: NOT $PLAYER_ACTOR ; not vertolet
847A: NOT $PLAYER_ACTOR ; not moto
004D: jump if false ЈЈWHEELIE
03C0: $carpl = actor $PLAYER_ACTOR car
0002: jump ЈЈWHEELIE2

:WHEELIE2
0001: wait 0 ms
00D6: if 2
8137: NOT car $carpl id == #BMX
8137: NOT car $carpl id == #BIKE
8137: NOT car $carpl id == #MTBIKE
004D: jump if false ЈЈWHEELIE_UNLOAD
00D6: if 0
00E1: key pressed 0 11 ; Yes
004D: jump if false ЈЈWHEELIE_UNLOAD
0407: create coordinate $wx1 $wy1 $wz1 from car $carpl offset 0.0 0.0 1.0
0407: create coordinate $wx2 $wy2 $wz2 from car $carpl offset 0.0 0.0 -1.0
0061: $wz1 -= $wz2 ;; floating-point values
00D6: if 0
0020: $wz1 > 1.75 ;; floating-point values
004D: jump if false ЈЈWHEELIE_UNLOAD
0002: jump ЈЈWHEELIE_LEFT

:WHEELIE_LEFT
0001: wait 0 ms
00D6: if 1
00E1: key pressed 0 17 ; prim fire
80E1: NOT key pressed 0 4 ; sec fire
004D: jump if false ЈЈWHEELIE_RIGHT
07DB: $carpl 0.0 0.75 0.0
0002: jump ЈЈWHEELIE_UNLOAD

:WHEELIE_RIGHT
0001: wait 0 ms
00D6: if 1
00E1: key pressed 0 4 ; sec fire
80E1: NOT key pressed 0 17 ; prim fire
004D: jump if false ЈЈWHEELIE_UNLOAD
07DB: $carpl 0.0 -0.75 0.0
0002: jump ЈЈWHEELIE_UNLOAD

:WHEELIE_UNLOAD
0001: wait 0 ms
01C3: remove references to car $carpl
0002: jump ЈЈWHEELIE

Очень надо спс заранее))))))))))))))))))))))))))))))))) Токо сделать файлик CS надо и всё)

 
Den_spbДата: Воскресенье, 21.06.2009, 01:21 | Сообщение # 12
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Во-первых, это формат МиссионБилдера. Конвертация осуществляется так: Сервис - Конвертация - МБ-СБ
Во-вторых, в клео по большей части допускаются только локальные переменные (см. статью). То есть все переменные со значком $ кроме переменной игрока надо заменить на локальные.
В-третьих, клео-скрипт должен начинаться и заканчиваться соответствующими командами (см. статью).

{$CLEO}
wait 0
:0
wait 0
if and
Player.Defined($PLAYER_CHAR)
Actor.Driving($PLAYER_ACTOR)
84C8: not actor $PLAYER_ACTOR driving_flying_vehicle
84A9: not actor $PLAYER_ACTOR driving_heli
847A: not actor $PLAYER_ACTOR driving_bike
jf @0
03C0: 0@ = actor $PLAYER_ACTOR car
jump @1

:1
wait 0
if and
not Car.Model(0@) == #BMX
not Car.Model(0@) == #BIKE
not Car.Model(0@) == #MTBIKE
jf @0
if
00E1: player 0 pressed_key 11
jf @0
0407: store_coords_to 1@ 2@ 3@ from_car 0@ with_offset 0.0 0.0 1.0
0407: store_coords_to 4@ 5@ 6@ from_car 0@ with_offset 0.0 0.0 -1.0
0061: 3@ -= 6@ // (float)
if
3@ > 1.75
jf @0
jump @2

:2
wait 0
if and
00E1: player 0 pressed_key 17
80E1: not player 0 pressed_key 4
jf @0
07DB: set_car 0@ rotation_velocity_XYZ 0.0 0.75 0.0 through_center_of_mass
jump @3
wait 0
if and
00E1: player 0 pressed_key 4
80E1: not player 0 pressed_key 17
jf @0
07DB: set_car 0@ rotation_velocity_XYZ 0.0 -0.75 0.0 through_center_of_mass
jump @3

:3
wait 0
Car.RemoveReferences(0@)
jump @0

Код исправлен

Сообщение отредактировал Den_spb - Воскресенье, 21.06.2009, 02:34
 
NoRVaNДата: Воскресенье, 21.06.2009, 02:48 | Сообщение # 13
Мажор
Группа: Проверенные
Сообщений: 221
Статус: Offline
Den_spb, Ой спасибо огромное тебе))))))))))))))))))))
Щас проверю)

Добавлено (21.06.2009, 02:45)
---------------------------------------------
Den_spb Не получаеться конвертирую но оно не делаеться в CS сделай плиз файл если не сложно?

Добавлено (21.06.2009, 02:48)
---------------------------------------------
Вылетает игра(

Сообщение отредактировал NoRVaN - Воскресенье, 21.06.2009, 01:52
 
Den_spbДата: Воскресенье, 21.06.2009, 09:07 | Сообщение # 14
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Была ошибка, сейчас код исправлен. Проверил в игре - работает. Компилируй заново.
 
Drift_LegendДата: Воскресенье, 21.06.2009, 16:24 | Сообщение # 15
>>>Drift Master Class<<<
Группа: Проверенные
Сообщений: 287
Статус: Offline
Den_spb, а писать можно {$CLEO .cs} или {$CLEO}? Это равноценно?
 
Den_spbДата: Воскресенье, 21.06.2009, 16:49 | Сообщение # 16
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Да, можно использовать любой вариант. По умолчанию код компилируется в cs файл.

Сообщение отредактировал Den_spb - Воскресенье, 21.06.2009, 16:50
 
NoRVaNДата: Воскресенье, 21.06.2009, 20:56 | Сообщение # 17
Мажор
Группа: Проверенные
Сообщений: 221
Статус: Offline
Den_spb, А почему он сохраняет в файле TXT в CS никак не получаеться??((((((

Добавлено (21.06.2009, 19:07)
---------------------------------------------
Пожалуйста создай и кинь файл плииз)))????????????

Добавлено (21.06.2009, 20:56)
---------------------------------------------
Плз создайте кто нибудь очень хочеться ездить на 2-ух колёсах(((((((((

Сообщение отредактировал NoRVaN - Воскресенье, 21.06.2009, 19:07
 
Drift_LegendДата: Понедельник, 22.06.2009, 01:38 | Сообщение # 18
>>>Drift Master Class<<<
Группа: Проверенные
Сообщений: 287
Статус: Offline
NoRVaN, после того, как вставил код, жми запуск -----> компилировать, а потом ищи файл cs! у меня он появляется в CLEO папке...
 
Colt_8Дата: Понедельник, 22.06.2009, 09:25 | Сообщение # 19
I LOVE GTA
Группа: Проверенные
Сообщений: 5216
Статус: Offline
Сохраняй тхт в папку клео сразу.
А потом нажимай F6 - оно скомплимирует его в туже папку.




 
Den_spbДата: Понедельник, 22.06.2009, 09:37 | Сообщение # 20
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Quote (NoRVaN)
Den_spb, А почему он сохраняет в файле TXT в CS никак не получаеться??((((((

А статьи я для кого пишу? Ясно ведь написал - не сохранять нужно, а компилировать (Запуск-Компилировать)
 
d88Дата: Понедельник, 22.06.2009, 09:48 | Сообщение # 21
Генерал Профессор
Группа: Проверенные
Сообщений: 1540
Статус: Offline
Quote (Drift_Legend)
NoRVaN, после того, как вставил код, жми запуск -----> компилировать, а потом ищи файл cs! у меня он появляется в CLEO папке...

Интересное дело! Как будто он сохраняется куда хочет! Куда сохранишь – там и появится.
 
Den_spbДата: Понедельник, 22.06.2009, 10:30 | Сообщение # 22
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Quote (d88)
Интересное дело! Как будто он сохраняется куда хочет! Куда сохранишь – там и появится.

При сохранении файла программа обычно запоминает, куда был сохранен последний файл. Если сохранить файл в клео-папке, то в следующий раз программа предложит сохранить файл там же.
 
NoRVaNДата: Четверг, 25.06.2009, 17:34 | Сообщение # 23
Мажор
Группа: Проверенные
Сообщений: 221
Статус: Offline
Colt_8, Спс) Именно так сделал)

Quote (Den_spb)
А статьи я для кого пишу? Ясно ведь написал - не сохранять нужно, а компилировать (Запуск-Компилировать)

Извини, кажеться что то неправильно прочитал ( cry
 
OKStyleДата: Суббота, 27.06.2009, 16:35 | Сообщение # 24
Малый
Группа: Пользователи
Сообщений: 1
Статус: Offline
Quote (Den_spb)
По умолчанию код компилируется в cs файл.

А разве не в *.scm?
 
Den_spbДата: Суббота, 27.06.2009, 17:40 | Сообщение # 25
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Я имел ввиду то, что если в директиве не указать расширения, т.е. написать {$CLEO}, то будет скомпилирован цс-файл. Если же директивы вообще не будет, то код скомпилится в скм.
 
=Niko=Дата: Понедельник, 29.06.2009, 12:36 | Сообщение # 26
Школьник I
Группа: Пользователи
Сообщений: 31
Статус: Offline
проверьте меня =)
(скажите что не правильно а что правильно)

Code
{$CLEO}
wait 0
:0
wait 0
if  
0256: player $PLAYER_CHAR defineв  
jf @0  
010D: set_player $PLAYER_CHAR health_to 100  
010D: set_player $PLAYER_CHAR wanted_level_to 0
010D: set_player $PLAYER_CHAR ammo_to 9999
jump @0


ыыы
 
d88Дата: Понедельник, 29.06.2009, 12:40 | Сообщение # 27
Генерал Профессор
Группа: Проверенные
Сообщений: 1540
Статус: Offline
Вместо jump @0 напиши 004E: end_thread
 
=Niko=Дата: Понедельник, 29.06.2009, 12:44 | Сообщение # 28
Школьник I
Группа: Пользователи
Сообщений: 31
Статус: Offline
и тогда всегда будут полные жизни, патроны и менты не будут разыскивать?

ыыы
 
Den_spbДата: Понедельник, 29.06.2009, 14:04 | Сообщение # 29
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Во-первых, в клео употребляем не
004E: end_thread
а
0A93: end_custom_thread
Но команда окончания скрипта в данном случае не нужна, т.к. скрипт должен быть зациклен - см. пример кода в статье.
Во-вторых, чтобы сделать игрока неуязвимым, можно просто поставить ему иммунитеты:
actor.SetImmunities($player_actor,1,1,1,1,1)
Насчет патронов не помню, надо мануал смотреть. А код неуязвимого сиджея, которым вдобавок абсолютно не интересуется полиция, выглядит так:

{$CLEO}
wait 0
:0
wait 0
if
0256: player $PLAYER_CHAR defined
jf @0
actor.SetImmunities($player_actor,1,1,1,1,1)
:1
wait 0
010D: set_player $PLAYER_CHAR wanted_level_to 0
jump @1

Поясняю. Команда присвоения иммунитетов, примененная один раз, делает игрока неуязвимым на всё время, пока запущена игра. Поэтому и в коде она записана так, что будет выполнена один раз. Команда присвоения уровню интереса полиции определенного значения (в данном случае нулевого) работает только один раз, поэтому в коде она записана так, что будет выполняться постоянно.

Сообщение отредактировал Den_spb - Понедельник, 29.06.2009, 14:23
 
Colt_8Дата: Понедельник, 29.06.2009, 16:39 | Сообщение # 30
I LOVE GTA
Группа: Проверенные
Сообщений: 5216
Статус: Offline
Напиши какие там файлы?



 
=Niko=Дата: Вторник, 30.06.2009, 10:01 | Сообщение # 31
Школьник I
Группа: Пользователи
Сообщений: 31
Статус: Offline
а как выглядит код например если нажать "P" то CJ мог вметнуть в кого-нибудь нож (или молнию)?

ыыы
 
MaZaHaKaДата: Вторник, 18.08.2009, 17:01 | Сообщение # 32
Школьник II
Группа: Пользователи
Сообщений: 72
Статус: Offline
у кого нить есть агент??

есл да то плиз научите мя в чате


 
Colt_8Дата: Вторник, 18.08.2009, 20:42 | Сообщение # 33
I LOVE GTA
Группа: Проверенные
Сообщений: 5216
Статус: Offline
А что такое агент?



 
MaZaHaKaДата: Вторник, 08.09.2009, 19:02 | Сообщение # 34
Школьник II
Группа: Пользователи
Сообщений: 72
Статус: Offline
mail.ru агент!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
или в асе


 
Den_spbДата: Вторник, 08.09.2009, 19:36 | Сообщение # 35
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Quote (MaZaHaKa)
есл да то плиз научите мя в чате

Учись сам. Меня, например, никто не учил.
 
MaZaHaKaДата: Вторник, 08.09.2009, 20:20 | Сообщение # 36
Школьник II
Группа: Пользователи
Сообщений: 72
Статус: Offline
{$CLEO .cs}
03A4: name_thread 'tachka'
:telefon_1
wait 0
if
0256: player $PLAYER_CHAR defined
004D: jump_if_false @tachka

create_thread @tachka

:tachka
wait 0
model.load(#INFERNUS)
038B: load_requested_models

:tachka_2
wait 0
if and
player.Defined($PLAYER_CHAR)
model.Available(#INFERNUS)
not actor.Driving($PLAYER_ACTOR)
00E1: key_pressed 304547
00E1: key_pressed 304550
jf @tachka_2
04C4: create_coordinate $X_1 $Y_1 $Z_1 from_actor $PLAYER_ACTOR offset 0.0 10.0 3.0
car.create($Car,#INFERNUS,$X_1,$Y_1,$Z_1)
car.removereferences($Car)
wait 5000
0A93: end_custom_thread

в чём ошбка????


 
dreamer2008Дата: Четверг, 31.12.2009, 01:59 | Сообщение # 37
Школьник I
Группа: Пользователи
Сообщений: 32
Статус: Offline
пордон, может не в тему, готов понести наказание есле чо.

нужно сделать миссию наподобие завоевания территории. только малех подругому.

есть остров.

на нем появляется ГГ. возможжно ли создать в майне (без клео)
простую миссию типо

входим в маркер и в течении нескльких минут ГГ атаковывают с вертолетов , высаживаются люди на остров с катеров желающие убить ГГ

всех их победили переходим на следущий уровень

та же атака только круче.

все материалы есть. остров готов. кароче написать скрипт и игруха готова.






 
DarkscapeДата: Четверг, 31.12.2009, 10:25 | Сообщение # 38
Профессор
Группа: Проверенные
Сообщений: 459
Статус: Offline
dreamer2008, пиши в тему "Вопросы по созданию скриптов", на вопрос ответят с большей вероятностью, чем на оффтоп.
Den_spb, хорошая статья, с нее я начал учится скриптингу biggrin


return
 
Den_spbДата: Четверг, 31.12.2009, 17:30 | Сообщение # 39
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Ну хорошо, что кому-то пригодилось.
 
M@trixДата: Суббота, 02.01.2010, 19:31 | Сообщение # 40
Студент
Группа: Проверенные
Сообщений: 151
Статус: Offline
Скажите плз что дальше по сложности после пикапов:) учусь че та в сане делать =)

 
DarkscapeДата: Суббота, 02.01.2010, 20:42 | Сообщение # 41
Профессор
Группа: Проверенные
Сообщений: 459
Статус: Offline
M@trix,
Quote (Gans|64|)
пиши в тему "Вопросы по созданию скриптов", на вопрос ответят с большей вероятностью, чем на оффтоп.


return
 
Den_spbДата: Суббота, 02.01.2010, 22:50 | Сообщение # 42
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Пиши какие-нибудь простенькие скрипты с условиями типа: если нажата какая-то кнопка, то игроку начисляются деньги.

Сообщение отредактировал Den_spb - Суббота, 02.01.2010, 22:51
 
Colt_8Дата: Суббота, 02.01.2010, 23:17 | Сообщение # 43
I LOVE GTA
Группа: Проверенные
Сообщений: 5216
Статус: Offline
ну это слишком просто!



 
DarkscapeДата: Воскресенье, 03.01.2010, 10:05 | Сообщение # 44
Профессор
Группа: Проверенные
Сообщений: 459
Статус: Offline
Colt_8, для начала пойдет.
Делай припаркованные авто, создавай актеров. Я с этого начинал


return
 
Colt_8Дата: Воскресенье, 03.01.2010, 18:00 | Сообщение # 45
I LOVE GTA
Группа: Проверенные
Сообщений: 5216
Статус: Offline
Quote (Gans|64|)
Делай припаркованные авто, создавай актеров. Я с этого начинал

Ты мне?! surprised surprised surprised




 
DarkscapeДата: Воскресенье, 03.01.2010, 19:37 | Сообщение # 46
Профессор
Группа: Проверенные
Сообщений: 459
Статус: Offline
Quote (Colt_8)
Ты мне?!
Нет, Матриксу


return
 
Den_spbДата: Понедельник, 04.01.2010, 10:39 | Сообщение # 47
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Quote (Colt_8)
ну это слишком просто!

Для тебя просто, потому что ты уже это знаешь smile
Кстати, в статье обнаружились некоторые неточности: 1. не обязательно ставить ожидания после каждой метки. 2. В первом домашнем задании 2 ошибки, а не 3.
 
snake78Дата: Среда, 24.02.2010, 15:11 | Сообщение # 48
Школьник II
Группа: Пользователи
Сообщений: 50
Статус: Offline
Статья кул!Пригодилась!автору + =)
Хотел кое чего спросить....
Вот я зделал самый простой клео скрипт:(я ток 2 дня назад начал обучатся)
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007

{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP

:test1
wait 0
if
0AB0: key_pressed 90
004D: jump_if_false @test1

wait 0
Model.Load(#TEARGAS)
Model.Load(#MOLOTOV)
Model.Load(#DESERT_EAGLE)
Model.Load(#SAWNOFF)
Model.Load(#MICRO_UZI)
Model.Load(#AK47)
Mo del.Load(#M4)
Model.Load(#SNIPER)
Model.Load(#HEATSEEK)
Model.Load(#FLAME)
Model.Load(#MINIGUN)
Model.Load(#NVGOGGLES)
038B: load_requested_models
wait 0
if
Model.Available(#TEARGAS)
Model.Available(#MOLOTOV)
Model.Available(#DESERT_EAGLE)
Model.Available(#SAWNOFF)
Model.Available(#MICRO_UZI)
Model.Available(#AK47)
Model.Available(#M4)
Model.Available(#SNIPER)
Model.Available(#HEATSEEK)
Model.Available(#FLAME)
Model.Available(#MINIGUN)
Model.Available(#NVGOGGLES)
032B: $WEAP = create_weapon_pickup #TEARGAS group 15 ammo 999999 at 2504.549 -1680.08 13.384
032B: $WEAP = create_weapon_pickup #MOLOTOV group 15 ammo 999999 at 2504.549 -1678.08 13.384
032B: $WEAP = create_weapon_pickup #DESERT_EAGLE group 15 ammo 999999 at 2504.55 -1676.1 13.4
032B: $WEAP = create_weapon_pickup #SAWNOFF group 15 ammo 999999 at 2504.549 -1674.08 13.384
032B: $WEAP = create_weapon_pickup #MICRO_UZI group 15 ammo 999999 at 2504.549 -1672.08 13.384
032B: $WEAP = create_weapon_pickup #AK47 group 15 ammo 999999 at 2504.549 -1670.08 13.384
032B: $WEAP = create_weapon_pickup #M4 group 15 ammo 999999 at 2504.549 -1668.08 13.384
032B: $WEAP = create_weapon_pickup #SNIPER group 15 ammo 999999 at 2504.549 -1666.08 13.384
032B: $WEAP = create_weapon_pickup #HEATSEEK group 15 ammo 999999 at 2504.549 -1664.08 13.384
032B: $WEAP = create_weapon_pickup #MINIGUN group 15 ammo 999999 at 2504.549 -1662.08 13.384
032B: $WEAP = create_weapon_pickup #NVGOGGLES group 15 ammo 1 at 2504.549 -1660.08 13.384
032B: $WEAP = create_weapon_pickup #FLAME group 15 ammo 999999 at 2504.549 -1658.08 13.384
wait 100
Model.Destroy(#TEARGAS)
Model.Destroy(#MOLOTOV)
Model.Destroy(#DESERT_EAGLE)
Model.Destroy(#SAWNOFF)
Model.Destroy(#MICRO_UZI)
Model. Destroy(#AK47)
Model.Destroy(#M4)
Model.Destroy(#SNIPER)
Model.Destroy(#HEATSEEK)
Model.Destroy(#MINIGUN)
Model.Destroy(#NVGOGGLES)
Mo del.Destroy(#FLAME)
wait 0
Model.Load(#BALLAS1)
Model.Load(#FAM1)
038B: load_requested_models
wait 0
if
Model.Available(#FAM1)
Model.Available(#BALLAS1)
$MYACT = Actor.Create(CivMale, #BALLAS1, 2485.2202, -1664.8018, 13.3437)
$MYACT = Actor.Create(CivMale, #FAM1, 2484.6963, -1668.2174, 13.3437)
$MYACT = Actor.Create(CivMale, #FAM1, 2481.7915, -1668.3193, 13.3392)
$MYACT = Actor.Create(CivMale, #BALLAS1, 2481.7915, -1668.3193, 13.3392)
$MYACT = Actor.Create(CivMale, #BALLAS1, 2481.8481, -1674.3522, 13.3401)
$MYACT = Actor.Create(CivMale, #FAM1, 2484.626, -1676.3137, 13.338)
end_thread

Скрипт правельный,в сане наротает.Но я хотел спроситть,как сделать так,чобы это действие можно было повторять??!?
Кто не понял:Этот скрипт делает так,что при нажатии клавиши "Z" у дома CJ появляються оружия с бесконечными патронами и балассы с бандой гроув.Тупо хватаеш пушку(или пешки)и мочиш их!Но как сделать,чтобы когда они все сдохли(баласы и банда гроув)при нажатии "Z" опять появились пушки и балласы с бандой гроув??!Подскажите плиз!!..

Если можно,то выложите мой скрипт с этим добавлением!...

 
Lost_ForeverДата: Среда, 24.02.2010, 17:30 | Сообщение # 49
Мажор сайта
Группа: Команда CG
Сообщений: 338
Статус: Offline
Сделай проверку на смерть актеров,после чего jump @test1 biggrin

Кстати у тебя ошибка в проверках + не юзай глобальные перменные($WEAP,$ACT,$CAR и т.п) используй локальные(0@,1@,2@ и т.д)

Вот пример того,что ты хотел:





Сообщение отредактировал Lost_Forever - Среда, 24.02.2010, 17:35
 
FIRE_DRAGONДата: Среда, 24.02.2010, 17:42 | Сообщение # 50
Мажор
Группа: Проверенные
Сообщений: 279
Статус: Offline
Щас выложу

Добавлено (24.02.2010, 17:42)
---------------------------------------------
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007
{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP

:1
wait 0
if
0AB0: key_pressed 90
004D: jump_if_false @1
jump @2

:2
wait 0
if and
Model.Available(#TEARGAS)
Model.Available(#MOLOTOV)
Model.Available(#DESERT_EAGLE)
Model.Available(#SAWNOFF)
Model.Available(#MICRO _UZI)
Model.Available(#AK47)
Model.Available(#M4)
Model.Available(#SNIPER)
Model.Available(#HEATSEEK)
jf @3
if and
Model.Available(#FLAME)
Model.Available(#MINIGUN)
Model.Available(#NVGOGGLES)
Model.Available(#FAM1)
Model.Available(#BALLAS1)
jf @3_2
jump @4

:3
wait 0
Model.Load(#TEARGAS)
Model.Load(#MOLOTOV)
Model.Load(#DESERT_EAGLE)
Model.Load(#SAWNOFF)
Model.Load(#MICRO_UZI)
Model.Load(#AK47)
M odel.Load(#M4)
Model.Load(#SNIPER)
Model.Load(#HEATSEEK)
038B: load_requested_models
jump @2

:3_2
wait 0
Model.Load(#FLAME)
Model.Load(#MINIGUN)
Model.Load(#NVGOGGLES)
Model.Load(#BALLAS1)
Model.Load(#FAM1)
038B: load_requested_models
jump @2

:4
wait 0
032B: $WEAP = create_weapon_pickup #TEARGAS group 15 ammo 999999 at 2504.549 -1680.08 13.384
032B: $WEAP_2 = create_weapon_pickup #MOLOTOV group 15 ammo 999999 at 2504.549 -1678.08 13.384
032B: $WEAP_3 = create_weapon_pickup #DESERT_EAGLE group 15 ammo 999999 at 2504.55 -1676.1 13.4
032B: $WEAP_4 = create_weapon_pickup #SAWNOFF group 15 ammo 999999 at 2504.549 -1674.08 13.384
032B: $WEAP_5 = create_weapon_pickup #MICRO_UZI group 15 ammo 999999 at 2504.549 -1672.08 13.384
032B: $WEAP_6 = create_weapon_pickup #AK47 group 15 ammo 999999 at 2504.549 -1670.08 13.384
032B: $WEAP_7 = create_weapon_pickup #M4 group 15 ammo 999999 at 2504.549 -1668.08 13.384
032B: $WEAP_8 = create_weapon_pickup #SNIPER group 15 ammo 999999 at 2504.549 -1666.08 13.384
032B: $WEAP_9 = create_weapon_pickup #HEATSEEK group 15 ammo 999999 at 2504.549 -1664.08 13.384
032B: $WEAP_10 = create_weapon_pickup #MINIGUN group 15 ammo 999999 at 2504.549 -1662.08 13.384
032B: $WEAP_11 = create_weapon_pickup #NVGOGGLES group 15 ammo 1 at 2504.549 -1660.08 13.384
032B: $WEAP_12 = create_weapon_pickup #FLAME group 15 ammo 999999 at 2504.549 -1658.08 13.384
wait 100
$MYACT = Actor.Create(CivMale, #BALLAS1, 2485.2202, -1664.8018, 13.3437)
$MYACT_2 = Actor.Create(CivMale, #FAM1, 2484.6963, -1668.2174, 13.3437)
$MYACT_3 = Actor.Create(CivMale, #FAM1, 2481.7915, -1668.3193, 13.3392)
$MYACT_4 = Actor.Create(CivMale, #BALLAS1, 2481.7915, -1668.3193, 13.3392)
$MYACT_5 = Actor.Create(CivMale, #BALLAS1, 2481.8481, -1674.3522, 13.3401)
$MYACT_6 = Actor.Create(CivMale, #FAM1, 2484.626, -1676.3137, 13.338)
wait 100
Model.Destroy(#TEARGAS)
Model.Destroy(#MOLOTOV)
Model.Destroy(#DESERT_EAGLE)
Model.Destroy(#SAWNOFF)
Model.Destroy(#MICRO_UZI)
Mod el.Destroy(#AK47)
Model.Destroy(#M4)
Model.Destroy(#SNIPER)
Model.Destroy(#HEATSEEK)
Model.Destroy(#MINIGUN)
Model.Destroy(#NVGOGGLES)
M odel.Destroy(#FLAME)
jump @5

:5
wait 0
if and
Actor.Dead($MYACT)
Actor.Dead($MYACT_2)
Actor.Dead($MYACT_3)
Actor.Dead($MYACT_4)
Actor.Dead($MYACT_5)
Actor.Dead($MYACT_6)
jf @5
jump @1
end_thread





Сообщение отредактировал FIRE_DRAGON - Среда, 24.02.2010, 17:43
 
Форум » GTA Модинг » Обучение Скриптингу » Скриптинг для ГТА Сан-Андреас. С чего начать? (Вот, решил написать статью)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Форма входа
Логин:
Пароль:
Наш опрос
Сколько вам лет?
Всего ответов: 347
Мини-чат
300
Баннерообмен
GTA FreeRunning 3 Сайт о киевском метро и МСТС/Дополнения к МСТС и информация о метрополитене
http://server-life.ru/
WWE.UA.RU.COM.NET Эксклюзивные моды для GTA San Andreas и GTA Vice City
Теги
GTA, San Andreas, GTA SA, GTA IV, GTA 4, Liberty City, Vice City, GTA VC, GTA LC, Chinatown Wars, CLEO, Mods, auto, moto, guns, weapons, maps, soundtrack, саундтрек, музыка, радио, статьи, форум, общение, вопросы, тачки, авто, машины, автомобили, мотоциклы, мото, велосипеды, русские, СССР, советские, клео, скрипты, моды, самолёты, вертолёты, персонажи, миссии, прохождения, карты, секреты, подсказки, новости, обои, фото, скриншоты, картинки, помощь, FAQ, screenshots, sanny builder, scripts, программы, проги, трейнеры, патчи, одежда, скины, транспорт, модификации, оружие, список, казино, лодки, поезда, авиация, Rockstar, рокстар, ГТА, GTA 5, GTA V