st1x51
160 постов
Карма: 8
#1 17 января 2012 в 12:28
Во-первых, позвольте мне дать вам краткое объяснение того, что же такое QC. QuakeC — интерпретируемый язык программирования, разработанный в 1996 году Джоном Кармаком (id Software) для написания части компьютерной игры Quake. Используя QuakeC, программист имеет возможность модифицировать игру: добавить оружие, изменить игровую логику и физику, написать сложный сценарий. Язык может использоваться для контроля за многими аспектами игры, такими как искусственный интеллект (противников), триггеры, изменения на карте.<br />QC записан в .qc файлах, которые компилируются QC компилятором в файл под названием progs.dat. Движок Quake читает код из progs.dat<br />QC код отвечает не за все в Quake. Часть кода обрабатывается движком. QC&nbsp; включает в себя: оружие, движения игроков,анимации,искусственный интеллект и т.д.<br /><br />Первое, что вы должны сделать, это достать копию исходного кода QC . Последней версией, выпущенной Software ID была версия 1.06, но я рекомендую использовать исходники&nbsp; Джастина Тимьяна, которые являются очищенным вариантом версии оригинального исходного кода. Его можно скачать здесь: http://www.quaddicted.com/files/tools/Clean_v106qc.zip<br />Следующее, что вам нужно сделать, это создать новый каталог для нашего мода. Внутри вашей папки Quake нужно создать папку с вашим модом,например mymod. Далее вам нужно поместить QC код в эту папку. Распакуйте Clean_v106qc.zip ,или возьмите папку qc из архива и положите ее в папку с вашим модом(в нашем случае это mymod),должно получится такое: quake/mymod/qc<br />Теперь, когда QC файлы лежат в нужной папке, следующее, что нужно сделать,это найти компилятор. Это программа, предназначенная для компиляции текстовых. QC-файлов в файл progs.dat. QC компилятора от ID Software назывался QCC.EXE, но как и многие оригинальные инструменты Quake он был заменен более современным компилятором, улучшенной версии. Я рекомендую&nbsp; FTEQCC.(http://www.4shared.com/file/yHnxNE5M/fteqcc.html) или (http://www.quaddicted.com/files/tools/fteqccgui2770-win32.zip) <br />Распакуйте этот файл в quake/mymod/qc&nbsp; и запустите FTEQCC.EXE для компиляции кода. Появится командная строка DOS и покажет список&nbsp; qc файлов ,а затем остановится.Предположим,что ошибок у нас никаких нет и закроем DOS окно. В папке quake/mymod появится наш progs.dat . Вы можете запустить этот мод сейчас, но так как мы ничего не изменили,значит глупо запускать тот же квейк.<br />Итак, давайте вдаваться в код. Но для начала, что мы хотим сделать? Я думаю, что для этого урока я начну с очень простого. Давайте сделаем &quot;Сообщение дня&quot;, сообщение, которое ненадолго появляется в центре экрана, когда игроки подключаются к серверу. Давайте сделаем это.<br />Открываем файл quake/mymod/qc/client.qc. Это QC файл&nbsp; отвечает за такие вещи как:спавн игроков, что делать когда игроки подключаются и отключаются и т.д. Это все относится к функциям клиента. QC файлы разбиваются на функции(functions), которые являются автономными участками кода. Простая функция выглядит следующим образом:<br />void() GotoNextMap =<br />{<br />&nbsp; &nbsp; &nbsp; &nbsp; if (cvar(&quot;samelevel&quot;)) // if samelevel is set, stay on same level<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; changelevel (mapname);<br />&nbsp; &nbsp; &nbsp; &nbsp; else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; changelevel (nextmap);<br />};<br />Это довольно короткая функция. Я не буду перечислять все, что она делает сейчас, здесь показано что у функции есть имя (GotoNextMap). А тело функции раздела в фигурных скобках(это код, который запускается, когда эта функция вызывается)<br />Хорошо, теперь игнорируем эту функцию полностью, так как я просто показал как функция выглядит. Функция, которую мы ищем, называется ClientConnect&nbsp; и находится она на линии 1159. Выглядит это примерно так:<br /><br />/*<br />===========<br />ClientConnect<br />вызывается,когда игрок подключается<br />============<br />*/<br />void() ClientConnect =<br />{<br />&nbsp; &nbsp; &nbsp; &nbsp; bprint (self.netname);<br />&nbsp; &nbsp; &nbsp; &nbsp; bprint (&quot; entered the game\n&quot;);&nbsp; &nbsp; <br />// a client connecting during an intermission can cause problems<br />&nbsp; &nbsp; &nbsp; &nbsp; if (intermission_running)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ExitIntermission ();<br />};<br /><br />Раздел [b] / * [/b]и [b]* /[/b], является комментарием. Комментарии игнорируются компилятором полностью, они нужны для того, чтобы сделать код более легким для чтения и понимания для людей, которые редактируют код. Строки, начинающиеся с[b] / /[/b]&nbsp; тоже комментарий. Как отмечено в комментарии,в начале говорится о том что, эта функция вызывается, когда клиент соединяется с сервером. Это идеальное место чтобы написать наш код &quot;Сообщение дня&quot;, так как мы хотим, чтобы сообщение писалось игроку, когда он присоединяется к серверу. В конце функции, как раз перед окончательным[b]};[/b]; добавьте следующую строку:<br />centerprint(self, &quot;Welcome To My Mod\n&quot;);<br />centerprint является функцией встроенной в движок и, используется для вывода сообщения в центре экрана игрока self является переменной, которая здесь указывает на игрока, который только что подключился к серверу, таким образом,движок&nbsp; знает, кому показать сообщение.(self на самом деле может относится к любому субъекту в игре)&nbsp; В функции стрельбы из оружия self будет относиться к игроку, который стрелял из оружия и т.д. Это очень полезная переменная для многих ситуаций, и вы будете использовать ее много раз. &quot;Welcome To My Mod\ n&quot;,&nbsp; сообщение, которое мы хотим отобразить. \ n в этом сообщении-не будет показано на экране,так как это используется для того,чтобы сообщить движку,что это конец строки.<br /><br />Вы, наверное, заметили, что большинство строк кода, кажется, заканчиваются точкой с запятой. Это говорит компилятору о том, что команда достигла конца, и он будет жаловаться/отказываться от компиляции, если [b];[/b] стоит не правильно.<br /><br />Говоря о компиляторах, сохраните&nbsp; client.qc и запустите FTEQCC.EXE. Предположим,что все скомпилировалось. Запускаем мод, и смотрим наше &quot;Сообщение дня&quot;