Реально крутой скриптинг - статья 1
Автор статьи: mordvin.
14 сентября 2006.
Реально крутой скриптинг.
В этих статьях я расскажу вам, как создавать миссии и не только к GTA:VC. Для SA всё немного сложнее, но я уверен, что вы сами разберётесь. Уже была статья с сайта gtazone.ru, но 1) неудобный общий код 2) неясность того, что же именно писать в одной из меток сподвигла меня на статьи.
СТАТЬЯ 1.
Структура начала скрипта.
Я предполагаю, что вы уже имеете опыт скриптёрства. Иначе ничего хорошего вы не напишете. Читайте, что ли, другие статьи...
Просто так миссию не создашь. Сначала давайте разберёмся в структуре редактирумого файла.
DEFINE VERSION VICE 1.4 ;; здесь задаётся версия компилятора. Скачайте самый новый.
0002: jump ЈЈSecondSegment
DEFINE MEMORY 34329 ;; здесь задаётся память, используемая в игре. Я не знаю, в каких единицах. Сам я не менял.
:SecondSegment
0002: jump ЈЈThirdSegment
DEFINE OBJECTS 3 ; количество 3-D объектов, используемых в скриптах, но не прописанных в default.ide. К ним можно обращаться по номеру (всегда отрицательный, а в последних версиях билдера - #, как и к объектам из default.ide.
;; Ниже находится список этих объектов. Он может быть достаточно длинным. Номер объекта зависит не от текста ";; Object number N", а от положения. Помните об этом, если изменяете/добавляете объекты. Хотя для способа # это роли уже почти не играет.
DEFINE OBJECT (no name) ;; This is an unused object. You can put anything here.
DEFINE OBJECT DTN_STADDOORA ; Object number -1
DEFINE OBJECT DTN_STADDOORB ; Object number -2
:ThirdSegment
0002: jump ЈЈLabelMAIN
DEFINE MISSIONS 2 ;; это описание количества потоков типа Missions (к которым относятся не только сами миссии, но и другие. В дальнейшем под термином "миссия" подразумевается именно такой поток)
DEFINE MISSION 0 at ЈЈStartM1 ; номер миссии, метка начала.
DEFINE MISSION 1 at ЈЈToMis1St
;; Здесь начинается управляющий поток.
;-------------MAIN---------------
:LabelMAIN
03A4: name_thread "MAIN"
016A: fade 0 () 0 ms
01F0: set_max_wanted_level_to 6 ;; максимальные *
0111: set_wasted_busted_check_to 0 (disabled) ;; НЕ МЕНЯТЬ!!!
00C0: set_current_time 5 0 ;; Время при запуске
0180: set on mission flag to $ONMISSION ;; НЕ МЕНЯТЬ!!!
030D: set_total_mission_points_to 20 ;; Количество макс. очков миссий. При выполнении миссий они увеличиваются (для чего есть специальная команда). Отношение набранных к максимуму есть процент выполнения в игре (percentage completed)
04E4: unknown_refresh_game_renderer_at -1532.524 -625.5527; Первые две координаты старта
03CB: set_camera -1532.524 -625.5527 14.46319
0053: $PLAYER_CHAR = create_player #NULL at -1532.524 -625.5527 14.46319; В этой и предыдущей команде - все 3 координаты старта
01F5: $PLAYER_ACTOR = create_emulated_actor_from_player $PLAYER_CHAR
0001: wait 0 ms
01B6: set_weather 0 ;; погода по умолчанию
00D6: if 0
8118: NOT actor $PLAYER_ACTOR dead
004D: jump_if_false ЈЈLabelMAIN2
0352: set_actor $PLAYER_ACTOR skin_to "PLAYER"
038B: load_requested_models
0353: refresh_actor $PLAYER_ACTOR
:LabelMAIN2
016A: fade 1 (back) 1000 ms
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ЈЈLabelMAIN3
04BB: select_interiour 0 ;; select render area - интерьер по умолчанию
01B4: set_player $PLAYER_CHAR frozen_state 1 (unfrozen)
01B7: release_weather
;; Предыдущими командами мы выполнили инициализацию игрока. Следующими мы начнём потоки:
004F: create thread ЈЈToSP
;; И замкнём управляющий в бесконечный цикл:
:LabelMAIN3
0001: wait 2500 ms
0002: jump ЈЈLabelMAIN3
Так устроен простейший MAIN (правда, он нерабочий, т. к. демонстративных меток ещё нет). Со сложными разберётесь.