Примеры скриптов

Слушай, я не дизайнер! Все чем могу помочь - это добавить пару дыр от пуль.

Сообщение Sage » 24 дек 2011, 01:06

Предлагаю размещать здесь те или иные примеры скриптов с комментариями, которые могут помочь при разработке карты любому картоделу. Итак, начну первым.

Телефонная будка
Это простой скрипт, который я взял из официального руководства, попробую объяснить что здесь происходит:

OBJ_DATA testphone = (108.5 , 151.5 , 2.0 ) 0 phone // Создаем телефон как объект
PLAYER_PED player = ( 108.5 , 150.5 , 255.0 ) 0 1
COUNTER exit = 0 // Устанавливаем переменную exit = 0

LEVELSTART
ANSWER_PHONE ( player , testphone , 40 ) // Заставляем телефон звонить 40 раз

WHILE_EXEC ( exit = 0 ) // Пока exit = 0 крутится следующий скрипт
IF ( CHECK_ANSWERED_PHONE ( testphone ) ) // Проверяем - поднял ли игрок трубку
DISPLAY_BRIEF ( 8012 ) // Если поднял - выводим сообщение "Молодец!"
STOP_PHONE ( testphone ) // Выключаем телефон
SET exit = 1 // Меняем значение переменной, чтобы цикл ожидания закрылся;
ENDIF
IF ( CHECK_FAIL_PHONE_TIMER ( testphone ) ) // Проверяем, не вышло ли время
DISPLAY_BRIEF ( 8013 ) // Если вышло - сообщаем "Плохи дела!"
STOP_PHONE ( testphone ) // Выключаем телефон
SET exit = 1 // Меняем значение переменной, чтобы цикл ожидания закрылся;
ENDIF
ENDWHILE
LEVELEND

Getaway
Далее разбор скриптов к карте Gateway. Пишет автор карты - PillBoX:

При создании уровня нужно разложить его на несколько логически законечнных отрывков. Начало действия – действие – завершение действия. Начало: копы бегут к двери и открывают ее, напарник персонажа бьет одного из них, после чего начинается погром. Игрок убивает остальных копов и освобождает Марселлоса. Уоллеса, надо полагать. Итак, самым первым действием будет простое – копы бегут к двери. Началом этого скрипта служит сам старт игры. Персонажам дается характеристика определяющая их отношение к игроку и его напарнику, а так же задание – двигаться в некую точку. По прибытии в пункт назначения – опасная близость к напарнику героя – этот отрывок заканчивается и начинается следующий.

//устанавливаем «банду»
SET_GANG_INFO (prisonersgang , 22 , ELECTRO_BATON , ELECTRO_BATON , ELECTRO_BATON , 0, 0.0 , 0.0 , 0.0 , 0, bug , 0 )

//устанавливаем уровень разыскиваемости
DECLARE_POLICELEVEL (4)

//устанавливаем зоны
MAP_ZONE prisoners1 = ( 0 , 0 , 0 , 0 , 250 , 0 , 0 , 0 , 1000 , 0 , 0)

//координаты игрока
PLAYER_PED player = (98.0 , 96.0 , 2.0) 22 0

//счетчики для внутриигровых событий
SAVED_COUNTER getaway=1
COUNTER world=1
COUNTER coppers=1

//объекты, броня
OBJ_DATA armor1

//стрелки
ARROW_DATA arrow1
ARROW_DATA arrow2

//звуки
SOUND dooropen
SOUND alarm1
SOUND alarm2
SOUND alarm3
SOUND alarm4
SOUND haha

//персонажи
CHAR_DATA cop1
CHAR_DATA cop2
CHAR_DATA cop3
CHAR_DATA cop4
CHAR_DATA cop5
CHAR_DATA cop6
CHAR_DATA cop7
CHAR_DATA cop8
CHAR_DATA cop9
CHAR_DATA cop10
CHAR_DATA cop11
CHAR_DATA cop12
CHAR_DATA cop13
CHAR_DATA cop14
CHAR_DATA tower1
CHAR_DATA tower2
CHAR_DATA tower3
CHAR_DATA tower4
CHAR_DATA tower5
CHAR_DATA tower6
CHAR_DATA tower7
CHAR_DATA tower8
CHAR_DATA tower9
CHAR_DATA tower10
CHAR_DATA tower11
CHAR_DATA friend1
CHAR_DATA friend2
CHAR_DATA marsellos
CHAR_DATA guard1
CHAR_DATA guard2
CHAR_DATA guard3
CHAR_DATA guard4

//тачки
CAR_DATA car1
CAR_DATA car2
CAR_DATA car3
CAR_DATA car4
CAR_DATA car5
CAR_DATA car6
CAR_DATA truck1
CAR_DATA truck2
CAR_DATA swatcar1
CHAR_DATA guardcar1
CHAR_DATA guardcar2
CHAR_DATA guardcar3
CHAR_DATA guardcar4

//начало
LEVELSTART

//уровень освещенности по дефолту
SET_AMBIENT_LEVEL (0.2, 0)

//расставляем персонажей и прописываем их ВНЕШНИЙ ВИД
marsellos = CREATE_CHAR (87.0, 103.0, 2.0) 22 0 criminal END
friend2 = CREATE_CHAR (98.0, 100.0, 2.0) 22 180 criminal END
friend1 = CREATE_CHAR (97.3, 96.1, 2.0) 22 180 dummy END
cop1 = CREATE_CHAR (92.5, 115.5, 2.0) 0 180 dummy END
cop2= CREATE_CHAR (93.5, 115.5, 2.0) 0 180 police END
cop14= CREATE_CHAR (93.5, 114.5, 2.0) 0 180 police END
cop3= CREATE_CHAR (100.5, 98.5, 2.0) 0 225 police END
cop4= CREATE_CHAR (94.5, 98.5, 2.0) 0 120 police END
cop5= CREATE_CHAR (91.5, 116.5, 2.0) 0 180 police END
cop6= CREATE_CHAR (93.5, 116.5, 2.0) 0 180 police END
cop7= CREATE_CHAR (83.5, 104.5, 2.0) 0 90 police END
cop8= CREATE_CHAR (83.5, 105.5, 2.0) 0 90 police END
cop9= CREATE_CHAR (81.3, 111.5, 2.0) 3 180 swat END
tower1 = CREATE_CHAR (76.5, 120.5, 7.0) 0 180 police END
tower2 = CREATE_CHAR (88.5, 122.5, 7.0) 0 180 police END
tower3 = CREATE_CHAR (76.5, 106.5, 7.0) 0 90 police END
tower4 = CREATE_CHAR (88.5, 132.5, 7.0) 0 270 police END
tower5 = CREATE_CHAR (96.5, 132.5, 7.0) 0 270 police END
tower6 = CREATE_CHAR (96.5, 127.5, 7.0) 0 225 police END
tower7 = CREATE_CHAR (106.5, 121.5, 7.0) 0 225 police END
tower8 = CREATE_CHAR (107.5, 108.5, 7.0) 0 270 police END
tower9 = CREATE_CHAR (104.5, 91.5, 7.0) 0 0 police END
tower10 = CREATE_CHAR (92.5, 91.5, 7.0) 0 0 police END
tower11 = CREATE_CHAR (77.5, 91.5, 7.0) 0 45 police END
cop10= CREATE_CHAR (83.0, 120.0, 2.0) 3 0 swat END
cop11= CREATE_CHAR (83.0, 120.5, 2.0) 3 0 swat END
//cop12= CREATE_CHAR (83.0, 121.5, 2.0) 3 0 swat END
//cop13= CREATE_CHAR (83.0, 119.5, 2.0) 3 0 swat END
guard1= CREATE_CHAR (89.8, 135.2, 2.0) 3 270 swat END

//расставляем тачки и прописываем их тип
car1 = CREATE_CAR (87.9, 118.3, 2.0) 0 180 copcar END
car2 = CREATE_CAR (86.9, 118.3, 2.0) 7 180 edsel END
car3 = CREATE_CAR (85.9, 118.3, 2.0) 3 180 spider END
car4 = CREATE_CAR (84.9, 118.3, 2.0) 0 180 morris END
car5 = CREATE_CAR (83.9, 118.3, 2.0) 30 180 fiat END
car6 = CREATE_CAR (103.9, 111.3, 2.0) 0 180 copcar END
car6 = CREATE_CAR (104.9, 111.3, 2.0) 12 180 limo END
truck1 = CREATE_CAR (129.5, 92.5, 2.0) 7 95 jeep END
guardcar1 = CREATE_CAR (91.4, 135.3, 2.0) 0 0 SWATVAN END
guardcar2 = CREATE_CAR (91.4, 136.7, 2.0) 0 180 SWATVAN END
guardcar3 = CREATE_CAR (94.5, 122.7, 2.0) 0 188 SWATVAN END
guardcar4 = CREATE_CAR (94.5, 124.2, 2.0) 0 188 SWATVAN END
swatcar1 = CREATE_CAR (85.5, 121.5, 2.0) 0 210 SWATVAN END

//раздаем оружие
GIVE_WEAPON (cop1 , shotgun)
GIVE_WEAPON (cop3 , pistol)
GIVE_WEAPON (cop4 , pistol)
GIVE_WEAPON (cop5 , pistol)
GIVE_WEAPON (cop6 , pistol)
GIVE_WEAPON (cop7 , pistol)
GIVE_WEAPON (cop8 , pistol)
GIVE_WEAPON (cop9 , machine_gun)
GIVE_WEAPON (cop10 , machine_gun)
GIVE_WEAPON (cop11 , machine_gun)
//GIVE_WEAPON (cop12 , machine_gun)
GIVE_WEAPON (cop14 , pistol)
GIVE_WEAPON (tower1 , molotov)
GIVE_WEAPON (tower2 , molotov)
GIVE_WEAPON (tower3 , molotov)
GIVE_WEAPON (tower4 , molotov)
GIVE_WEAPON (tower5 , molotov)
GIVE_WEAPON (tower6 , molotov)
GIVE_WEAPON (tower7 , molotov)
GIVE_WEAPON (tower8 , molotov)
GIVE_WEAPON (tower9 , molotov)
GIVE_WEAPON (tower10 , molotov)
GIVE_WEAPON (tower11 , molotov)
GIVE_WEAPON (guard1 , rocket_launcher)

//ставим броню
armor1 = CREATE_OBJ ( 82.0 , 105.0, 2.0 ) 0 COLLECT_31 END

//расставляем персонажам реакцию на выстрелы
SET_CHAR_THREAT_REACTION ( cop1 , NO_REACTION )
SET_CHAR_THREAT_REACTION ( cop2 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( cop3 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( cop4 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( cop5 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( cop6 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( cop7 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( cop8 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( cop9 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( cop14 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( friend1 , NO_REACTION )
SET_CHAR_THREAT_REACTION ( friend2 , NO_REACTION )
SET_CHAR_THREAT_REACTION ( marsellos , NO_REACTION )
SET_CHAR_THREAT_REACTION ( tower1 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( tower2 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( tower3 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( tower4 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( tower5 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( tower6 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( tower7 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( tower8 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( tower9 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( tower10 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( tower11 , REACT_AS_NORMAL )
SET_CHAR_THREAT_REACTION ( guard1 , REACT_AS_NORMAL )

//СУТЬ СКРИПТА. Показать игроку сообщения и заставить 3 полицейских
//идти в конкретную зону.
//скрипт: (до тех пор пока счетчик гетавай=1, покажи мессагу из r.gxt
//под номером 1019 и сообщение 1020, потом дай задание трем персонажам
//»идти в нужную зону», и если персонаж коп2 придет в нужную зону,
//переведи счетчик гетавай в положение 2)
WHILE (getaway=1)
DISPLAY_MESSAGE (1019)
DISPLAY_BRIEF (1020)
SET_CHAR_OBJECTIVE (cop1, GOTO_AREA_ON_FOOT, 97.5, 98.1, 2.0)
SET_CHAR_OBJECTIVE (cop2, GOTO_AREA_ON_FOOT, 97.5, 97.5, 2.0)
SET_CHAR_OBJECTIVE (cop14, GOTO_AREA_ON_FOOT, 94.0, 97.5, 2.0)
IF (LOCATE_CHARACTER_ON_FOOT ( cop2 , 97.5 , 97.5, 2.0, 1.0, 1.0))
set getaway=2
ENDIF
ENDWHILE

//СУТЬ СКРИПТА: Показать игроку новое сообщение, открыть клетку
//игрока, заставить одного копа убить игрока, а другого – убить этого
//копа, остальные пусть стоят на месте
//срипт: (до тех пор пока гетавай=2, убери все сообщения с экрана,
//покажи сообщение 1022, потом открой дверь и убери из игры нужный блок
//(открой клетку то есть), потом дай задание персонажам, выведи стрелку
//на полицейского, и переведи счетчик в положение 3)
WHILE (getaway=2)
CLEAR_ALL_BRIEFS ( )
DISPLAY_BRIEF (1022)
dooropen = CREATE_SOUND ( 98.0 , 97.1 , 2.0 ) GARAGE_OPEN play_instant END
REMOVE_BLOCK ( 97 , 97 , 2 , DONT_DROP )
SET_CHAR_OBJECTIVE (cop2, kill_char_any_means, player)
SET_CHAR_OBJECTIVE (cop1, WAIT_ON_FOOT)
SET_CHAR_OBJECTIVE (cop14, WAIT_ON_FOOT)
SET_CHAR_OBJECTIVE (friend1, kill_char_any_means, cop2)
POINT_ARROW_AT (arrow1, cop2)
set getaway=3
ENDWHILE

//СУТЬ СКРИПТА: если полицейского ударил персонаж friend1, заставить
//перевести всех остальных копов в «преступников», и заставить их
//следовать за игроком, раздать им оружие и организовать сирену
//скрипт: (пока счетчик гетавай=3, если персонажа коп-2 ударил
//персонаж фриенд-1, очисти все сообщения с экрана и покажи сообщение
//1021, потом измени тип персонажей, добавь группу персонажей к игроку
//чтобы они за ним следовали, потом добавь в эту группу персонажей,
//раздай им оружие, создай 4 звука тревоги, убери старую стрелку и
//поставь новую, измени уровень полиции на 4, и переведи счетчик на 4)
WHILE (getaway =3 )
IF (CHECK_CHAR_BEEN_PUNCHED_BY ( cop2 , friend1))
CLEAR_ALL_BRIEFS ( )
DISPLAY_BRIEF (1021)
SET_CHAR_OCCUPATION ( friend1 , criminal )
SET_CHAR_OCCUPATION ( cop1 , criminal )
ADD_GROUP_TO_CHARACTER (player, 0)
ADD_EXISTING_CHAR_TO_GROUP ( player, friend1 )
ADD_EXISTING_CHAR_TO_GROUP ( player, cop1 )
GIVE_WEAPON (friend1, shotgun)
GIVE_WEAPON (player, shotgun)
alarm1 = CREATE_SOUND ( 92.5 , 97.5 , 2.0 ) PRISON_alarm play_forever END
alarm2 = CREATE_SOUND ( 92.5 , 111.5 , 2.0 ) PRISON_alarm play_forever END
alarm3 = CREATE_SOUND ( 92.5 , 123.5 , 2.0 ) PRISON_alarm play_forever END
alarm4 = CREATE_SOUND ( 83.5 , 119.5 , 2.0 ) PRISON_alarm play_forever END
remove_arrow (arrow2)
point_arrow_at (arrow1, 98.0, 99.0, 2.0)
ALTER_WANTED_LEVEL ( player , 4 )
set getaway=4
ENDIF
ENDWHILE

//СУТЬ СКРИПТА: сымитировать расстрел игроком замка клетки Марселлоса,
после чего открыть ему клетку и присоединить Марселлоса к группе
игрока, и дать ему пистолет
//скрипт: (пока счетчик гетавай=4, если персонаж стреляет в зоне
//такой-то, убери все сообщения, покажи сообщение 1023, убери блок
//такой-то, открой дверь, создай звук хохота, добавь персонажа в группу,
//дай ему оружие, переведи стрелку на новый объект)
WHILE (getaway=4)
IF (IS_CHAR_FIRING_IN_AREA ( player , 98.0 , 98.8 , 2.0 , 0.5 , 0.5 ))
CLEAR_ALL_BRIEFS ( )
DISPLAY_BRIEF (1023)
REMOVE_BLOCK (97, 98, 2, DONT_DROP)
dooropen = CREATE_SOUND ( 98.0 , 98.8 , 2.0 ) GARAGE_OPEN play_instant END
haha = CREATE_SOUND ( 98.0 , 98.8 , 2.0 ) SMUG_LAUGH play_instant END
ADD_EXISTING_CHAR_TO_GROUP ( player, friend2 )
GIVE_WEAPON (friend2 , pistol)
point_arrow_at (arrow1, 91.0, 105.0, 2.0)
set getaway=5
ENDIF
ENDWHILE

……………………..
……………………..
……………………..

//конец скрипта
LEVELEND
Аватара пользователя
Sage
Администратор
 
Сообщения: 189
Зарегистрирован: 17 авг 2011, 15:46

Сообщение Andrey_M » 24 дек 2011, 20:02

Ага, спасибо за разборы телефонов
В принципе не знал как их делать...
А телефонные задания как делать? В оригинальной игре они сложены в папочки для каждого района. Нельзя ли сделать так же при большом кол-ве заданий?
You did it! Go to a big pink marker to leave the Industrial District!
Проект Island Town в разработке.
Andrey_M
 
Сообщения: 171
Зарегистрирован: 22 дек 2011, 14:17
Откуда: Самара

Сообщение Zm3ika » 04 янв 2012, 01:27

хорошая информация по скриптам http://en.wikigta.org/wiki/Modding_Tuto ... #Scripting

остается лишь перевести в понятный язык = )
Изображение
Аватара пользователя
Zm3ika
 
Сообщения: 12
Зарегистрирован: 02 янв 2012, 22:42

Сообщение Sage » 04 янв 2012, 10:06

Zm3ika писал(а):хорошая информация по скриптам http://en.wikigta.org/wiki/Modding_Tuto ... #Scripting

остается лишь перевести в понятный язык = )


А ведь действительно хорошая!
Аватара пользователя
Sage
Администратор
 
Сообщения: 189
Зарегистрирован: 17 авг 2011, 15:46

Сообщение Web » 11 янв 2012, 09:00

Почитал информацию на сайте и пришел к выводу, что как только закончится сессия и появится свободное время на работе - займусь возрождением своей карты. Могу кста сделать перевод на "понятный" язык, ну тоже конечно же после сессии.
Гамать, гамать и ещё раз гамать, как завещал великий пакмен!
ИзображениеИзображение
Аватара пользователя
Web
 
Сообщения: 69
Зарегистрирован: 27 дек 2011, 00:05
Откуда: Череповец

Сообщение Andrey_M » 13 фев 2012, 22:16

Sage, а в первом твоём примере как сделать, чтобы телефон бесконечно раз звонил?
You did it! Go to a big pink marker to leave the Industrial District!
Проект Island Town в разработке.
Andrey_M
 
Сообщения: 171
Зарегистрирован: 22 дек 2011, 14:17
Откуда: Самара

Сообщение Sage » 14 фев 2012, 13:06

Ух не подскажу...
Аватара пользователя
Sage
Администратор
 
Сообщения: 189
Зарегистрирован: 17 авг 2011, 15:46

Сообщение Andrey_M » 14 фев 2012, 21:32

Sage, в оригинальной гта2 телефоны звонили бесконечно раз, это как триггеры. Просто в твоём примере он звонит по таймеру с определённым временем.
You did it! Go to a big pink marker to leave the Industrial District!
Проект Island Town в разработке.
Andrey_M
 
Сообщения: 171
Зарегистрирован: 22 дек 2011, 14:17
Откуда: Самара

Сообщение Sage » 14 фев 2012, 21:52

Это не мой пример, это пример из руководства ) Я его разобрал.

Твой пример - смотри например исходники питера или третьего района
Аватара пользователя
Sage
Администратор
 
Сообщения: 189
Зарегистрирован: 17 авг 2011, 15:46

Сообщение Andrey_M » 14 фев 2012, 21:57

А где исходники питера найти?
You did it! Go to a big pink marker to leave the Industrial District!
Проект Island Town в разработке.
Andrey_M
 
Сообщения: 171
Зарегистрирован: 22 дек 2011, 14:17
Откуда: Самара

След.

Вернуться в Картостроение

Кто сейчас на конференции

Зарегистрированные пользователи: нет зарегистрированных пользователей