Использование Areaportal’ов
Если перед игроком находится дверь, то движок игры просчитывает все, что находится за ней, хотя игрок этого и не видит – естественно это сильно снижает фпс. Чтобы этого избежать – нужно использовать Areaportal – текстуру из папки common, которая будет блокировать просчет графики за дверью. Areaportal сработает как триггер когда вы задействуете дверь и «включит» пространство за ней для вашего обозрения.
Правило №1 – Areaportal должен находиться внутри дверей (func_door и func_door_rotating) чтобы работать. На рисунке ниже – простой пример скользящей двери (func_door) и Areaportal’а с ней. Заметьте, что границы Areaportal’а больше границ двери – это допуск для того чтобы открылась дверь.
http://hiperon.front.ru/images/tut_areaportal2.jpg
http://hiperon.front.ru/images/tut_areaportal3.jpg
Правило №2 – Areaportal не должен касаться пустоты. Обращайтесь с ним как с другим телом однако не углубляйте его значительно в пустоту на карте – он не будет работать правильно.
Правило №3 – Areaportal должен использоваться в глухом объеме. Пример: комната с 4-мя стенами и дверью с Areaportal’ом – работает хорошо, но если вы добавляете в комнату окно, Areaportal работать не будет вообще.
Пример использования Areaportal’а:
Ниже приведен образец карты с дверями и Areaportal’ами в них.
http://hiperon.front.ru/images/tut_areaportal1.jpg
Вы можете видеть что пространство за дверями отрисовывается только в моменты когда игрок подходит к двери или открывает ее.
http://hiperon.front.ru/images/tut_areaportal7.jpg
http://hiperon.front.ru/images/tut_areaportal8.jpg
http://hiperon.front.ru/images/tut_areaportal9.jpg
Несколько текстур, которые используются с целью получить тот или иной эффект в игре.
Areaportal
Bsp тулса использует ареапорталы чтобы создавать сильные визуальные разрывы\разломы между локациями на карте. Пока не сработает ареапортал, геометрия за ним блокируется для отрисовки. Ареапортал должен быть тонким брашем. Он должен прикасаться ко всем брашам, которые формируют переход между порталами. Он должен быть размещен внутри двери, открытие которой ведет к срабатыванию браша, закрытие двери вернет все назад. Текстура ареапортала должна поностью наглухо запаивать одно пространство от другого (возможно с использованием других порталов). Если дверь используется для закрытия от просмотра пространства - размещайте в ней ареапортал.
Caulk
Текстура, которая не просчитывается редактором при компилировании. Рекомендуется присваивать эту текстуру всем граням и поверхностям, которые не будут видны игроку на карте. Также эту текстуру располагают позади кривых (Curves).
Clip
Невидимая текстура, которая блокирует передвижение игрока (но не выстрелы оружия), используется для сглаживания перемещения игрока. Полезна в местах со сложной архитектурой.
Cluster Portal
Работает как ареапортал НО только для навигации ботов. Кластер портал используется bspc утилитой для разделения карты на маленькие места для рассчета навигации ботов.
Cushion
Падение игрока на такую текстуру не приносят ему повреждения. Звук падения не слышен.
Do Not Enter
Используется для исправления проблем с навигацией ботов. Если вы наблюдаете, неадекватное поведение ботов, в каком то месте на вашей карте – попытайтесь исправить это с помощью этой текстуры.
Hint
Помогает определять vis порталы. Используется как подсказка компилятору в течение vis фазы, когда разделяется мир (карты). В общем, они используются, чтобы исправлять vis проблемы, которые проявляются как "коридор зеркал" заметный в игре. Это может быть исправлено корректным размещением данной текстуры. Если вы заполняете объем, где есть подобная ошибка - проблема может исчезнуть при следующей компиляции.
Invisible
Текстура, которую вы увидите, только если будете стрелять в нее.
Nodrawnonsolid
То же самое что и nodraw.
Noimpact
Используется для создания поверхностей не блокирующих выстрелы из оружия.
Origin
Эта текстура нужна для двигающихся объектов, таких как b_models или дверей.
Slick
Текстура, снижающая трение на поверхности.
Trigger
Используется для создания триггер брашей.
Weapon Clip
Этот вариант текстуры «клип» блокирует только выстрелы из оружия. На поверхности следы не остаются. Используйте ее для отделки моделей, таких как misc_model.
Делаем арки
Рисуем браш размерами с предпологаемую арку.
Затем идём в закладку Curve и там выбираем End cap...
http://img419.errorurl.us/my.php?image=55mk.jpg
Жмём, получаем арку... В таком варианте её можно конечно использовать для создания многих объектов. Но чаще всего нам нужны арки других форм... Для этого жмём вот на эту кнопочку, выскочит вот такое окошко
http://img419.errorurl.us/my.php?image=65me.jpg
В нём жмём например Inverted Endcap, и получаем такую арку.... Чтоб более точно подогнать арку под нужный размер, селектируем её и нажимаем клавишу V - выделятся вершины арки, перемещая которые, придаём арке нужный размер и форму.
http://img336.errorurl.us/my.php?image=74yq.jpg
Делаем цилиндры, трубы, провода
Всё как и в случае с арками... сначала - рисуем браш нужного размера, идём в закладку Curve и там выбираем Cylinder... Получаем то, что хотели...
http://img103.errorurl.us/my.php?image=53fb.jpg
Если цилиндр нужен какой-то хитрой формы, то жмём не на Cylinder, а на More Cylinder и выбираем нужный вариант. Далее, заселектировав полученный цилиндр, нажав V и меняя проекции по осям, получаем возможность гнуть его и изменять форму. Чтоб вывернуть его текстурой внутрь, например для создания шахты канализации, достаточно нажать комбинацию Ctrl+i
Полезные статьи:
http://www.gamedev.ru/articles/?id=60108
http://www.gamedev.ru/articles/?id=60113
http://www.gamedev.ru/articles/?id=60107
http://www.gamedev.ru/articles/?id=60106
Делаем арки
Добавил бы очень важный момент ... как наложить правильно текстуру... Ну обычно боковые стенки арки это части стен (кирпич) а внутренняя поверхность (сама арка) это например штукатурка... Дак вот фокус в том что заселектировав арку и многие другие фигуры из бизь мы можем получить доступ к отдельным частям фигуры .. Происходит это при нажатии клавиши TAB Т.е. селектируя отдельные поверхности придаем им нужную текстуру...
Создаём ландшафты
----
начнем. сначала вы естественно должны скачать easygen http://digilander.iol.it/ilbanca/files/EasyGen_v14.zip
тулу не нужно инсталировать, просто распакуйте куда вам удобно. запускайте прогу и сразу запускайте wisard настроек.
что настраивать:
Export folders
work mod: wolfenstein\main folder
bitmaps: wolfenstein\main\maps (но этот пункт не нужен, если вы не будете нуждаться в битовом массиве после создания карты. (just an example you don't have to take this one as you won't need the bitmap anymore after having created the map!)
Import folder
bitmaps: (могут быть везде где вам удобно, это просто место где EasyGen ищет ваши heightmap) (can be wherever you like. it's only the place easygen looks at to find your heightmap - i ll describe the expression later!)
(не знаю как это перевести с технической точки зрения. вам виднее )
остальные настройки оставьте по дефолту и жмите ОК.
теперь создайте heightmap. используйте любой графический редактор. изображение должно быть 8-bit grayscale и размером 33x33 пикселя. как например на картинке:
какого хрена, спросите вы. неужели из такой маленькой пикчи можно сделать территорию? да, расслабтесь, это так.
возвратитесь в EasyGen, выберите file>import>heightmap
если у вас не установлен путь до ваших bitmap, то укажите путь до них вручную.
откроется небольшое окно, в правом углу увидете цифры. это высота карты. дефолтным значением стоит 256, что является гладким покрытием. изменив значение на 1024, вы можете изменять рельеф. должно получиться что-то типа этого:
можете крутить ландшафт как вам удобно, зажимая левую и правую кнопки мышки.
теперь давайте поменяем ландшафт под ваши нужды. на сетке ландшафта нажмиет на modifier. функция scale отвечает за вытягивание по осям. удерживая shift + правую кнопку мышки, вытягивайте ландшафт вниз или вверх.
теперь, коглда у вас готов ландшафт, приступим к его текстурированию. если у вас не распакованы текстуры, придется это сделать. текстуры ландшафта брать из wolfenstein\main\pak0.pk3. добавлять menu terrain>add folder и указать директорию с текстурами. текстуры должны отображаться в левом углу окна.
что бы создать свою alphamap текстуру, кликните на одном из черных полей. запустится визард, для установки цвета, задайте зеленый. затем из директории текстур выберите что нить погрязнее сделайте то-же самое для двух других текстур. я выбрал ГРЯЗЬ и СКАЛА.
теперь вы имеете 3 текстуры для закрашивания ландшафта. выберите текстуру которая вам нарвится, кликая по цветам которые вы им задали, зажмите Ctrl, shift и левую кнопку мышки и закрасьте текстурой ваш ландшафт. примерно так это выглядит:
(кликните для увеличения)
http://www.wolfensteinx.com/surface/images/tutorials/easygen/easygen5.jpg
почти все готово, надо лишь экспортировать вашу карту в Radiant. кликните на exp map в меню. в окне введите значения как на скриншоте:
(это на техническом языке. сами переводите )
You can't see that here so i' ll tell you: the alphamap has to be in the main-folder, and the metashader in the scripts folder. I am not sure if they all have to have the same names as the map but to be sure do that. When you entered everything click on continue. You will be asked for the map name, take 'terrain_tut' and save it in your maps- folder.
теперь откройте это в Radiant.
Хотелось бы добавить... Размер битмапа (33х33) не от балды Он должен соответствовать разметке территории причем к размеру каартинки прибавляется по 1 пикслю т.е если территория делится на сетку 32х32 квадрата, то картинка 33х33 пикселя... Либо надо использовать кратность..
Вот самые распространённые ошибки компиляции, их причины и способы устранения. Нужно перевести на человеческий язык :D :+:
Compile Error Messages
Q.
MatchToken( "{" ) failed at line xx
A. xx can be a variety of numbers, it relates to what line the error is on in either your .map file or one of your shaders. Say it gives MatchToken {"{"} failed at line 55, then you need to open up your map file or shader in notepad (check your map file first) look down for line 55 and see where you can add in the bracket.
Q.
Shader not found/shader image missing
A. This is where you might not have loaded any textures and you will see that blue and black image.
Also if you have added some custom textures, make sure there in the textures folder, and that you have entered the shader into the shaderlist.txt. Say if the texture folder you have created is called "town" then you need to add "town" to the shaderlist.txt on a new line.
Sometimes common textures may suddenly disappear, this can be often solved by reinstalling the editor. No one seems to know why this happens, but its rare and can be solved usually by reinstalling radiant.
On occasion you might have made a texture and in the shader not put in "qer_editorimage textures/mymap/texturename.jpg " if you dont have that line then the editor wont display the texture image.
Also shader image missing is often a harmless message appearing in the console or compile.
Q.
Leaf has too many portals
A. Generally means that you have a very complicated brush someplace probably with a lot of faces and is far too irregular and complex so the map wont compile so you need to make it less complex.
Q.
ERROR: DispatchBSPCommand failed with a COM exception
A. A problem with gtkbuild and q3build, you must have the .dll in the plugins folder and it needs to be compatible with the editor or it will give this error, with wolf you probably wont be using any of these compilers anyway, but if you are somehow this might occur.
Q.
SV_SetBrushModel: NULL
A. This is an error which related to one of the entities in your map, say you have placed a areaportal texture on a door entity, thats going to give this error. You should look through your entities and see if you can see anything dodgy. Look for mainly irregular textures on entities, like the areaportals on doors, origin textures on triggers etc, remove textures that shouldn't be on certain entities.
Debatably can also be where you have entities that are only 1 smallest unit thick. This error has been debated to whether it does really cause this error, still if the other solution doesnt work try this.
Q.
FloatPlane:bad normal
A. A Not to common error, this seems to occur after some vertex manipulation gone wrong, check your vertexed shapes for irregulars and you can try deleting vertexed shapes that disappear when you try vertexing them. Im not 100% sure but you could also try using bobs tools in the plugins, and select brush cleanup which should delete bad brushes for you.
Q.
RE_LoadWorldMap: maps/mymap.bsp not found
A. Always type /sv_pure 0 before loading your map up, it turns off pure server. Also could mean you have a leak, so check for leaks! Dont know what leaks are? check the FAQ here
Q.
Bad PointToPolygonFormFactor
A. This is some sort of patch/mesh error, some say its caused by large patches and you can ignore it if it doesnt cause any problems. Also it is said that it can occur from a patch/mesh being to close to a sky texture.
Q.
Node without a volume / node has x tiny portals/ node with an unbound volume
A. Usually a problem with small brushes of 1x1 or infinite brushes, it needs to be deleted.
You also might want to try using bobs tools to delete it, by pressing "brush cleanup". Also by using the co-ordinates given in the error you can try to find the brush and delete it that way.
Q.
WindingFromDrawSurf failed: MAX_POINTS_ON_WINDING exceeded
A. Often happens when you have a lot of brushes touching one brush, like 64 (which is meant to the the limit )all touching the same brush. Which if you can imagine you have made a wall and have 64 brushes up against it you will probably receive this error, so try to cut them down to less.
Q.
MAX_MAP_BRUSHSIDES
A. This is normally a problem with your total amount of brushes on the map being over the limit, the limit is apparently 32768, so you should try to get rid of some brushes. If your amount of brushes is around that area or you can remove some brush sides, each brush has multiply sides so try removing some of the sides that wouldn't be seen when playing.
Q.
MAX_PATCH_PLANES
A. This usually means that a brush face that is visible is being split to many times, seems similar to max points winding in that you might get this error if you have too many vertices touching one brush or face
Q.
Couldn't find image for shader noshader
A. You might see this pop up now and again, it usually means a slight error in a shader, but it can usually be ignored with no problems
Q.
MAX_FACETS
A. Apparently too many cones or spheres, you must have a crazy map to receive this error, the limit is 65,535 of facets mr coneman
Q.
MAX_MAP_LIGHTGRID
A. Usually means far too many lights are in your map, and to solve this you need to up the gridsize setting. You can use Worldspawn to enter gridsize with values of 128 128 128 or higher
You can also use the common/lightgrid texture to make a single brush around your map which q3map will keep in these bounds, therefore not lighting up anything not in under the bounds of the brush.
Q.
MAX_SURFACE_VERTS
A. This usually happens with large maps, it occurs when you have 256+ vertices on one face, which reminds me of the MAX_POINTS_ON_WINDING which has a limit of 64 vertices touching one brush, so its odd how it can even happen. Anywho you need to rectify the error by not having so many vertices on one brush!
Q.
WARNING: models/mapobjects/texturename.tga has empty alpha channel
A. Normally no big deal and can be ignored
Q.
MAX_VISIBILITY_EXCEEDED
A. You may get this error when making a very large map, and although the obvious thing to do is to downsize the map you can do other things such as use detail brushes more so the vis data is less complicated so then the vis data wont be so large.
Also dont forget to use the caulk texture. Take into account the way the map is structurally made, it might not of given the error because the map is huge, but because its been made poorly in that you can see too much on screen at once and the view of whats on screen at once hasn't been taken into account well enough.
Q.
WARNING: light grid mismatch
A. Can mean you havent done the part of the light compile possibly due to a leak or other error, which has resulted in full bright in map and that error message, so check for leaks and other errors, or run a full compile if you forgot to run the light part and had full bright light.
Q.
MAX_BUILD_SIDES
A. Usually means you have a really complicated complex brush in your map, thats not allowed! you need to make it less complex!
Q.
Brush with no normal
A. A brush has a dodgy face. Usually means that you cant see it in the editor, but can in the map (in game).
You can use bobs tools: brush cleanup to get rid of these in some situations, in other situations you might have to search your map file (in notepad) and look for decimal points (in the first 3 numbers in the brackets)and round them off (get rid of the decimal point). Also you might of manually rotated a patch and its went all funny, best not to rotate patch meshes manually (by using rotate and then move the mouse around to move them)
Q.
Warning RE_Add Poly To Scene: Null Shader
A. Usually an error with a shader which you need to find, it can prove difficult, you have to move custom pk3 files one by one into a temp folder and then see if you still get the error, when you dont get the error you will know what pk3 file to look in and look for the broken shader you have made.
Q.
MAX_SWITCHED_LIGHTS
A. This usually occurs with some abnormal targeting of lights, check for lights with "targetnames" in by mistake, remove all the targetnames from the light entities to fix it.
Q.
Line xxx is incomplete
A. Can be where you have missed out a end bracket { in a shader or some sort of missed out part of some code in a shader on the line mentioned, so check your custom shaders for incomplete brackets etc.
Q.
UnmatchedToken
A. Usually an error with a missing closing or opening { in the start of the map file, you will need to open up your .map file in notepad and compare it with a working .map file, you might see at the start a missing bracket or unclosed one in worldspawn or something so try altering.
Q.
Map Map Visibility
A. Occurs when you have made a large map and too much is visible on screen or its just so huge the engine cant make the map. Try adding some vis blockers and making the map visually smaller.
Q.
Couldnt find bsp
A. Usually means you didnt put in /sv_pure 0 before you loaded your map, you must use /sv_pure 0 for mp maps otherwise it wont load. Can also occur very rarely where your map is there yet it doesnt seem to see, try renaming it and it normally works.
Q.
MAX_SURFACE_INFO
A. Main cause of this is when you have too many shaders. Try removing lines of them that are not used or remove entire ones, the limit is 3192. Unlikely to occur unless you have a large amount of shaders and textures in your map
Q.
MAX_MAP_DRAW_SURFS
A. This might occur if you have put tesssize 1 in your shader by mistake, this means that texture is being tiled thousands of times so to speak. You need to enlarge the number to around 128, 256, etc
Q.
Error: aas_point arena num: aas not loaded
A. This is normally where you are trying to load a single player map and you havent got any .aas files. Also remember to use "/spdevmap yourmapname" to load up.
For each single player map you make you need two .aas files, these are information for the AI, you only need to compile them using a tool, and they must relate to the same name as your map. See more in the tutorial for how to make aas files
Q.
Backwards Tree Volume
A. The brushes that are touching the void are not structural. Select them, right-click on the 2D view, and select "Make Structural".
Try to think of structural brushes as your foundations, walls and roof/sky of your map, and detail brushes are everything that sits inside your map, furniture, decorations, paint on the walls etc.
Делаем двери
1. Рисуем браш по размерам двери.
2. Натягиваем "дверную" текстуру (нужно внимательно просмотреть, чтоб везде текстура легла корректно)
3. Далее рисуем браш высотой в нашу дверь и толщиной не шире толщины двери. Даём ему текстуру origin. Текстура origin находится в папке common.
4. Этот origin-браш вставляем в дверь и именно в то место, где должна быть ось вокруг которой дверь и должна открываться (как правило ближе к какому-нибудь краю, особое внимание при этом обратить на расположение текстуры двери - на некоторых из них нарисованы петли или ручки).
5. Далее селектируем оба браша и даём им функцию door_rotating
6. Вставляем готовую дверь в подготовленный проём.
7. Дверь надо использовать в обрамлении дверной коробки, чтоб выглядело всё красиво.
8. Чтоб дверь функционировала с сответствующим ей звуком, нужно в её свойствах (вызываются клавишей N) указать её тип (метал, дерево):
type 1 - металл
type 4 - дерево и т.д.
Но это ещё не всё. Есть еще один очень важный "дверной" секрет:
чтоб немцы не залипали за дверью и чтоб дверь не прижимала плеера - необходимо нарисовать с одной и другой стороны двери два браша, шириной примерно с ОТКРЫТУЮ дверь, натянуть на них текстуру trigger (обитает тоже
в common) и дать этим брашам функцию ai-door.
Далее, необходимо поставить 2 ai-markerа возле этих триггер-брашей и привязать по очереди с помощью комбинации клавиш Ctrl+K: ai-marker - trigger. Затем, сняв выделение и заселектировав заново привязываем
trigger - дверь. Потом повторяем эту операцию с объектами по другую сторону двери...
В этом случае, при приближении немцев - дверь будет открываться и они не будут залипать...
Script Mover
Перемещение объекта в RTCW требует нескольких различных действий. Она требует .ai файла и .script файла для вашей карты. В случае, если Вы не знаете, .ai, и .script файлы -то разъясняю это основные файлы скриптинга, которые инструктирует вашу карту, и имеет такое же название как ваша карта .Эти файлы созданы чтобы картопостроитель, писал, что игра должна выполнять определенные вещи. Поскольку Вы, возможно, предположили, что .ai файл говорит об искусственном интеллекте и вещи, имеющие дело с искусственным интеллектом происходят в .script`е - файле..
Сначала создайте браш который вы хотите переместить куда либо .Подойдет самый простой брашик имеющий определенную текстуру .Пожалуйста не забывайте, что это не объект, который игрок будет в состоянии передвинуть это - только кое-что, что переместится самостоятельно в указанное место когда вы ее активируете .После того, как Вы создаете браш, заселектируйте его и затем нажмите правую кнопку мыши на нее в 2D виде естественно появиться меню, затем нажимите на script_mover. См. скриншоты ниже.
http://mansinf.mylivepage.ru/image/56/269/SHOT_1A0.JPG
http://mansinf.mylivepage.ru/image/56/270/shot_1b0.gif
Вы только что превратили этот браш в Entity, в script_mover, если быть точным. Теперь выберите ее снова и нажмите 'N', чтобы вывести ее свойства. Сначала, проверьте стоит ли галочка на Solid - это нужно для того чтобы ваш объект был не проходимым на сквозь.
Далее вы должны добавить два ключа. Первый ключ называется Scriptname.В строку Key вводите scriptname. А в нижнюю вводите Script1. в наших целях мы будем использовать script1. Этот ключ который говорит Script_Mover`у как она будет называться в .script файле. Затем, добавьте еще один ключ .В строку Key вводите слово "Target " а в Value "Function1" Это говорит script_mover`у что она будет функционировать. Ваше окно свойств теперь должно выгледить так как показано на рисунке
http://mansinf.mylivepage.ru/image/56/273/SHOT_200.GIF
Перед следующим шагом, решите, где ваш браш будет перемещаться точно. Планируйте курс в уме. Продолжим .Теперь нажмите правую кнопку мыши в любом 2D виде, перед вами появиться меню там выберите --> path_corner. Это - просто Entity местоположения т.е куда будет перемещаться ваш браш. Можете поместить его куда только вам взбредет в голову и это еще не все вы можете поместить столько, сколько вы хотите. теперь выберите каждый из поставленных вами patch-corner`ов войдите в окно свойств в строку Key вводите targetname, и в Vаlue введите path1. Удостоверьтесь, что каждый из них отличаются друг от друга... См. скриншоты ниже, чтобы видеть мой script_mover и все его path_corner`ы. Свойства одного из path_corner`ов показано на рисунке .
http://mansinf.mylivepage.ru/image/56/277/SHOT_3A0.JPG
http://mansinf.mylivepage.ru/image/56/275/SHOT_3B0.GIF
Хорошо, следующий Entity, который вы должны поставить на вашу карту это - target_script_trigger .Можете поместить его куда угодно от этого ничего не зависит Теперь опять же нажав "N" в строку key вводите ainame а в value слово player.После нее В key еще раз напишите target и в Value function2.И последнее. Еще раз введите в key targetname а в value tst_1. См. скриншот ниже.(И вы точно все поймете)
http://mansinf.mylivepage.ru/image/56/272/SHOT_400.JPG
Последнее что вы должны сделать это - func_button. Это - Entity на основе браша, вам придется сначала сделать браш который будет вашей кнопкой, Теперь выберите вашу кнопку снова и правой кнопкой мыши щелкнув на 2D виде укажите на func, и затем щелкните func_button. Теперь выберите это снова, и нажмите 'N', чтобы вывести его свойства. Теперь в строку Key вводите Target а в Value введите Tst_1 Если вы все сделали правильно Target_script_trigger и ваша кнопка должны соединиться в редакторе
http://mansinf.mylivepage.ru/image/56/276/SHOT_5A0.JPG
http://mansinf.mylivepage.ru/image/56/274/SHOT_5B0.JPG
Хорошо, теперь сохраните и закройте редактор карт. Остальная часть работы будет с .ai и .script файлами, которые не должны быть слишком сложными как вам кажется. Пойдите в вашу папку RTCW\Main\maps, и сделайте новый .txt файл. Вставьте информацию как показано на скриншоте.
http://www6.pochta.ru/hosting/N7c6ec8c67fd649035ba0fcbe09269be/go/?f=%2FMaps%2FSHOT_600.JPG
Тогда сохраните его , и переименуйте это к вашакарта.ai. Теперь позвольте мне объяснять, что мы что только сделали. Каждый блок программы, или кодовый блок, выделены фигурными скобками ({и}). Выше каждого набора фигурных скобок - название кодового блока. В этом случае, это - игрок, потому что наш скрипт обращается игроку. Это - единственный случай, где Вы не можете изменить название кодового блока - это ДОЛЖЕН быть игрок. Поскольку Вы можете вспомнить, это - имя, которую мы дали ainame target_script_trigger. Мы говорили ему как назвать этот кодовый блок. Однако, мы также дали этому и function2. Это определило, которые функции, она выполняет в пределах нашего кодового блока. Вы можете также понять, что я помещал Trigger - слова перед Function2. Однако, мы не включали то слово, помещая это в редакторе. Это - только для файла скрипта. Углубление не имеет значения, это должно только там помочь делать объекты организованными. Так, игрок нажимает func_button, который предназначается для target_script_trigger, активирует кодовый блок игрока который мы для него писали и функцию function2. Поскольку Вы можете видеть, есть одна линия текста в пределах той функции, спусковой механизм script1 function1. Это говорит игре вызывать блок скрипта script1 и функцию function1 в пределах того кодового блока. Мы собираемся делать это через секунду. Однако, это будет в .script файле взамен, А НЕ в .ai файлf. Так, сделайте другой .txt файл в вашей \maps папке и откройте его. Еще раз, сделайте это как показано на скриншоте ниже, за исключением части, где я сказал INSERT YOU COMAND.
http://www6.pochta.ru/hosting/N7c6ec8c67fd649035ba0fcbe09269be/go/?f=%2FMaps%2FSHOT_700.JPG
Еще раз, сохраните его и переименуйте это в вашакарта.script. Поскольку Вы можете видеть, мы имеем блок скрипта script1 с функцией function. Для них предназначалась команда в нашем .ai файле. Планирование функции function1 управляет всеми командами в вашем скрипте. Они, наконец, говорят вашему script_mover, что они должны делать. Есть много возможностей. Например, печатание gotomarker path1 50 сказало бы ему идти в path1 path_corner со скоростью 50. Ждать 4000, сказали бы мы и она ждет 4 секунды до выполнения следующей команды. Это - 4000, потому что это измерено в миллисекундах. Так в течение 4.5 секунд только помещают 4500. Вы можете также поместить faceangles x# y# z# time#, и это повернется к данному xyz координаты в указанном времени, снова измеренном в миллисекундах. Например, Вы могли поместить faceangles 0 180 0 1500. Только удостоверьтесь, что Вы только помещаете одну команду в линию, и затем script_mover выполнит их чтобы. Вот - пример полного .script файла со всеми командами:
http://www6.pochta.ru/hosting/N7c6ec8c67fd649035ba0fcbe09269be/go/?f=%2FMaps%2FSHOT_800.JPG
Поскольку Вы можете видеть, последняя линия команд называет ту же самую функцию снова, и снова таким образом начинает процесс, эффективно создавая своего рода цикл. Если Вы хотели, бы остановить его достаточно удалить последнюю строку
Теперь, когда Вы, игрок нажимает в игре кнопку, это должно предназначаться для target_script_trigger, который называет функцию function2 в пределах скрипта в .ai файле. Функция function2 тогда имеет команду в этом, которое называется функцию function1 и в скрипте script1 .script файла. Команды там тогда фактически говорят вашему script_mover entity`у, что они должны сделать и куда пойти.
Цилиндры
Для создания брашей с цилиндрической формы необходимо создать обыкновенный браш. А затем сделать следуещее преобразование Curve-Cylinder. Тут же ваш браш превратиться в цилиндр, основание которого будет точно вписываться в основание браша - основы. Для получения цилиндра с идельно круглым оснаванием, нужно просто создавать его из браша с квадратным основанием.
В любом случае вы получите цилиндр без поперечных образующих. То есть такой простой цилиндр нельзя преобразовывать, перемещая образуещие его вершины. ( мнимые вершины если быть точнее ).
При необходимости в дальнейшем искажать внешний вид вашего цилиндра, воспользуйтесь следующим меню: Curve-More Cylinders-Dense Cylinder (цилиндр с одной образующей поперечной окружностью, делящей его пополам.
Curve More Cylinders- Very Dense Cylinder( цилиндр с тремя образующими поперечными окружностьями, делящими его на четыре равные части).
Пукт Curve-More Cylinders- Squre Cylinder Преобразует ваш ЛЮБОЙ браш в параллелепипед по габаритным размерам.
Ошибки компиляции - Compile Errors
WindingFromDrawSurf failed: MAX_POINTS_ON_WINDING exceeded
1.Для компиляции на стадии bsp используйте q3map2 с ключом -meta или:
2.На одном ребре какого-то браша очень много вершин, лежащих в одной плоскости. (о------о-------о--------о----о)
Постарайтесь чтобы их было две. Не выстраивайте точки в одну линию.
MAX_SURFACE_VERTS
На карте слишком много кривых (patches).
Постарайтесь уменьшить их количество.
MAX_MAP_LIGHTGRID
На карте очень много источников света.
Выделите любой браш на карте (не являющиися entity),
нажмите N - появится окно со свойствами worldspawn.
Создайте новый ключ: lightgrid и в его значении напишите 64 64 64.
Также, эта ошибка можеть быть вызвана
слишком большим количеством брашей на карте.
Попробуйте упростить дизайн карты.
MAX_FACETS
Очень много многогранных объектов (сфер, конусов и т.п.) на карте.
Максимальное количество граней на карте - 65 535
(Возможно, в новых версиях q3map2 этот предел увеличен).
MAX_MAP_BRUSHSIDES
Где-то на карте есть очень сложный браш.
Удалите и постройте его по новой, более проще, или из нескольких брашей.
MatchToken( "{" ) failed at line xx
Опечатка в шейдере к текстуре (модели)
Откройте ваш файл \scripts\*.shader и проверьте,
не забыли ли в конце закрыть какой-нибудь скрипт
фигурной скобкой "}", не пропустили ли скобку "{" в начале скрипта,
не повторили ли символ дважды "}}", не перепутали ли "{" c "}"
(скрипт всегда открывается скобкой "{", а закрывается скобкой "}".
Line xxx - номер строки с ошибкой в файле *.shader.
FloatPlane:bad normal
При редактировании вершин брашей (клавиша V) может получится "неправильный" браш,
либо совсем исчезнуть (визуально, в радианте - в игре он появится). Чтобы найти и удалить "исчезнувший" браш:
Воспользуйтесь плагином brush cleanup
(меню Plugins -> Bob Toolz -> brush cleanup) или:
Попробуйте открыть вашу карту в другом редакторе -
QuArK (Quake Army Knife).
Он покажет все ваши браши - нормальные и "исчезнувшие" в радианте.
Всегда используйте инструмент clipper (клавиша X)
для обрезки брашей или создания брашей неправильной формы.
Не двигайте вершины (V). Если все-таки это необходимо -
двигайте их с помощью клавиши E.
делаем радар
Создай браш с видом радара. В центре создай будущую ось вращения и наложи на неё текстуру Common-origin. Теперь выдели всё полученное и кликни на 2D окне правой кнопкой мыши. В появившимся контектном окне выбери пункт Func-Func_Rotating. В принципе на этом всё. Можно добавить и поэкспериментировать с параметром Speed (скорость вращения) а так же создать другую ось вращения. Если желаешь создать вентилятор на стене, то поставь галочку в меню (вызывается кнопкой N) X_axis (Y-axis). Хочешь убить попавшего в радар человека, добавляй параметр dmg и пиши нужное число отнимемых жизней.
Осей вращения всего три и для них существует одно плохое правило - напрвление вращения ВСЕГДА происходит по часовой стрелке, если наблюдать за ним от центра осей координат в ПОЛОЖИТЕЛЬНОМ направлении. Поясню. Если на полу запустить шестерёнку, то на виде сверху она будет крутиться против часовой стрелки. Можно конечно сделать любую ось вращения и задать любое направление, но это выходит за рамки данного мануала.
ВАЖНЫЕ МЕЛОЧИ ПРИ СОЗДАНИИ ДВЕРЕЙ
Данные фишки предназначены для тех, кто выполнил все по статье krot'a "Делаем двери", но у него проблемы с текстурами (они не натягиваются толком на браш двери и его надо увеличивать, чтоб было все видно). Что же делать?
1. Сделайте все, как написано в статье Krot'a. Если у вас текстура полностью не вытянулась - не беда, щас будем исправлять
2. Берем наш браш двери и нажимаем S. В появившемся окне жмем "Fit". Вуаля! Только обратите внимание, после нажатия fit текстура может быть отраженной по горизонтали (важно при создании флагов и табличек). Эта проблема решается только изменением места вашего браша. Если вы делаете дверь, то вам ничего в положении самой двери менять не надо, только в положении origin-браша.
3. Если Вас не устраивает расположение текстур и Вы хотите сделать их повыше/пониже не меняя положения браша, используйте Shift+стрелки.
АИ СКРИПТИНГ Часть 2
Если вы сделали все правльно то у вас должна быть комната и кеслер и так открываем ваш блокнот у вас там должно уже быть вот так:
//
//ai scripting
//map: tut.map
//last edited by:Astrol
//
Код:
player
{
spawn
{
mu_start sound/music/l_briefing_1
}
playerstart
{
// Оружие
giveweapon weapon_sten
giveweapon weapon_knife
// Патроны
setammo ammo_9mm 64
setclip weapon_sten 32
//give gun
selectweapon weapon_sten
// Дополнительно
setarmor 50
giveinventory key_binocs
}
}
party1
{
attributes
{
}
spawn
{
takeweapon weapon_thompson // Томпсон будет в руках кесслера
giveweapon weapon_luger // пистолет
setclip weapon_luger 8 // 8 патронов для пистолета
setammo ammo_9mm 16 // 16 патронов по 9мм
}
}
мы просто будем продолжать
в конце где стоит }} две скобки одну удлаем.
Далее в персонаже party1 в spawn ставим
wait 30//можно ставить как вы хотите чтобы после того он выполнил какое либо задание.
Далее открываем вашу карту и ставим aimarker в нем пишем:
key: targetname
volume: gotokes
можно ещё добавить angle чтобы например когда он дошел до маркера повернулся.
Теперь сохраняем и открываем блокнот.
после wait 30 где мы указывали пишем trigger go и trigger animation, так же добавляйте перед тригерами clearanim и resetscript для того чтобы он стоял и ничего не делал первоночально.
у вас должно получиться так:
Код:
party1
{
attributes
{
}
spawn
{
takeweapon weapon_thompson // Томпсон будет в руках кесслера
giveweapon weapon_luger // пистолет
setclip weapon_luger 8 // 8 патронов для пистолета
setammo ammo_9mm 16 // 16 патронов по 9мм
wait 30// В какое время он выполнит команду
clearanim // Это говрит о том что он просто будет стоять и ничего не делать в переводе чистая анимация.
resetscript // если вы например запускали какой то механизм пишем это сбросить скрипт в переводе.
trigger go //запускает пусковой механизм
trigger animation //запускает пусковой механизм
}
}
далее добовляем вот это:
Код:
enemysight // пишем когда он увидит противника что он будет делать
{
clearanim // говорит что ничего делать не будет либо по умолчанию
}
death // Что будет если он умерт например какой нибудь звук либо запуск какого нибудь механизма.
{
}
у вас должно получиться так:
Код:
party1
{
attributes
{
}
spawn
{
takeweapon weapon_thompson // Томпсон будет в руках кесслера
giveweapon weapon_luger // пистолет
setclip weapon_luger 8 // 8 патронов для пистолета
setammo ammo_9mm 16 // 16 патронов по 9мм
wait 30// В какое время он выполнит команду
clearanim // Это говрит о том что он просто будет стоять и ничего не делать в переводе чистая анимация.
resetscript // если вы например запускали какой то механизм пишем это сбросить скрипт в переводе.
trigger go //запускает пусковой механизм
trigger animation //запускает пусковой механизм
}
enemysight
{
clearanim // говорит что ничего делать не будет либо по умолчанию
}
death
{
clearanim // Что будет если он умерт например какой нибудь звук либо запуск какого нибудь механизма.
}
далее пишем trigger go
в нем пишем
gotomarker gotokes // теперь он побежит по заданому маркеру.ниже еще один тригер trigger animation
в нем playanim open_door both // здесь говорится что он будет делать все команды находятся в models/player/partisan/wolfanim.cfg both нужно подоставлять всегда.
Вот исходный скрипт:
Код:
party1
{
attributes
{
}
spawn
{
takeweapon weapon_thompson // Томпсон будет в руках кесслера
giveweapon weapon_luger // пистолет
setclip weapon_luger 8 // 8 патронов для пистолета
setammo ammo_9mm 16 // 16 патронов по 9мм
wait 30// В какое время он выполнит команду
clearanim // Это говрит о том что он просто будет стоять и ничего не делать в переводе чистая анимация.
resetscript // если вы например запускали какой то механизм пишем это сбросить скрипт в переводе.
trigger go //запускает пусковой механизм
trigger animation //запускает пусковой механизм
}
enemysight
{
clearanim // говорит что ничего делать не будет либо по умолчанию
}
death
{
clearanim // Что будет если он умерт например какой нибудь звук либо запуск какого нибудь механизма.
}trigger go
{
gotomarker gotokes // теперь он побежит по заданому маркеру.
}
trigger animation
{
playanim open_door both // здесь говорится что он будет делать все команды находятся в models/player/partisan/wolfanim.cfg both нужно подоставлять всегда.
}
А вот целый скрипт:
Код:
//
//ai scripting
//map: tut.map
//last edited by:Astrol
//
player
{
spawn
{
mu_start sound/music/l_briefing_1
}
playerstart
{
// Оружие
giveweapon weapon_sten
giveweapon weapon_knife
// Патроны
setammo ammo_9mm 64
setclip weapon_sten 32
//give gun
selectweapon weapon_sten
// Дополнительно
setarmor 50
giveinventory key_binocs
}
}
party1
{
attributes
{
}
spawn
{
takeweapon weapon_thompson // Томпсон будет в руках кесслера
giveweapon weapon_luger // пистолет
setclip weapon_luger 8 // 8 патронов для пистолета
setammo ammo_9mm 16 // 16 патронов по 9мм
clearanim // Это говрит о том что он просто будет стоять и ничего не делать в переводе чистая анимация.
resetscript // если вы например запускали какой то механизм пишем это сбросить скрипт в переводе.
wait 30// В какое время он выполнит команду
trigger go //запускает пусковой механизм
trigger animation //запускает пусковой механизм
}
enemysight
{
clearanim // говорит что ничего делать не будет либо по умолчанию
}
death
{
clearanim // Что будет если он умерт например какой нибудь звук либо запуск какого нибудь механизма.
}
trigger go
{
gotomarker gotokes // теперь он побежит по заданому маркеру.
}
trigger animation
{
playanim open_door both // здесь говорится что он будет делать все команды находятся в models/player/partisan/wolfanim.cfg both нужно подоставлять всегда.
}
}
Тем самым мы сделали анимацию в движение.
Мануал составил Astrol
Создаем лампочку которая может включаться и выключаться.
Для начала у вас в карте должен быть рубильник или рычаг, кнопка ну что то в этом роде с помощью которой будет врубаться наш рубильник…
На данном уровне будем считать, что он у вас есть
Итак начинаем..
1. Сделайте два маленьких браша размеров маленьких лампочек
2. Потом идите в папку lights там хранятся все текстуры лампочек света и.т.п.
А в этот lights вы можете попасть через меню Textures в радианте…
В своем примере я буду использовать желтую лампочку, там вы можете найти желтую горящую и желтую выключенную
3. Далее выделите одну из брашей и дайте ей func_static
4. Потом точно так же дайте func_static и второй лампочке.
5. И наконец дайте им текстуры лампочек.
На одной должен быть свет горящей на другой выключенной…
На самом то деле они будут сменять друг друга при активации, а игрок будет думать что она горит и выключается.
6. Теперь выделите горящую лампочку и в ее свойствах поставьте галочку start_invis
Это значит что ваша горящая лампочка при старте вашей карты не будет видна на языке геймера это лампа выключена.
7. Теперь поставьте target_relay
(это устройство с помощью которой можно актировать почти все что угодно в Вольфе)
8. И последнее что остается вам сделать : соединить все ваши объекты. Соедините Кнопку(Button) и Реле(Target_relay)..
Как вы их будете соединять имеет очень большое значение потому что стрелка будет отходить от кнопки, если вы первым выделите кнопку и потом уже Реле, а если вы сделаете наоборот, то стрелка будет отходить не от кнопки а от реле и это неправильно..
Так теперь если вы соединили Кнопку и Реле можно переходить к след.
9. Соединению. Соедините Реле(Target_Relay) и одну из лампочек(Func_static).. И так же соед-те
Вторую лампу
(не забывайте что стрела должна отходить от Реле в данном случае)
И теперь если вы этого не сделали вам нужно эти ваши 2 лампы поставить друг в друга чтоб они стали одним целым
Если вы хотите чтобы ваша лампочейка выглядела по эффектнее вы можете проделать еще одно…
Поставьте 2 короны(corona).Что это я вам объяснять не буду. На одну из них в св-вах врубите галочку start_off(она значит что она будет выключена в начале как и одна из ваших ламп(горящая)) Теперь поставьте эту корону в вашу лампочку всуньте ее в нее на половину и соедините реле и корону и второе точно так же соедините второю корону и ее тоже поставьте в эту же лампу будет лучше если короны будут друг в друге
Если вы хотите дать цвет короне выделите ее и нажмите K потом выберите соответствующий цвет…
Так же вы можете и выделить размер вашей короны для этого пробейте в ее свойствах Key: scale Value: 5
Таким образом мы создали лампочку включающеся рубильником.
Мануал составил Kes$LeR
Ключевые слова в программировании Аи для Вольфа
Ai Атрибуты
running_speed 220
Используется для установки скорости бега бота. По умолчанию 220.Максимум 300
walking_speed 90
Используется для установки скорости ходьбы. По умолчанию 90. Максимум 300
crouching_speed 80
Используется для установки скорости бега в прыгнувшем состоянии. По умолчанию 80. Максимум 300
fov 240
Используется для установки поля видимости бота. По умолчанию 240 Максимум 360
yaw_speed 300
Используется чтоб придать боту ловкость. По умолчанию 300 максимум 300
aim_skill 0.5
Устанавливает способность бота выстрелить в определенные цели. По умолчанию 0.5 Максимум 1.0
aim_accuracy 0.5
Устанавливает меткость бота. По умолчанию 0.5 Максимум 1.0
attack_skill 0.75
Устанавливает уровень ведения войны бота. Например: будет использовать гранаты, Пулемет, снайперскую винтовку. По умолчанию 0.75 Максимум 1.0
reaction_time 0.5
Устанавливает реакцию бота в секундах. По умолчанию 0.5 Максимум 1.0
attack_crouch 0.4
Заставляет бота атаковать приседая. По умолчанию 0.4 Максимум 1.0
AGGRESSION
Делает бота более умным. т.е если вы пытаетесь проскочить мима него незаметно, то у вас это не получится потому что бот более агрессивен. По умолчанию 0.0 Максимум 1.0
tactical 0.8
Бот будет вести себя более тактично. Использовать окружающую среду для защиты
По умолчанию 0.8 Максимум 1.0
camper 0.0
Устанавливает у бота способности кампинга. По умолчанию 0.0 Максимум 1.0
alertness 16000
Устанавливает поле зрения бота в пикселях. По умолчанию 16000 Максимум 9999999
starting_health 100
Устанавливает начальное здоровье у бота. По умолчанию 100 Максимум 99999
hearing_scale 1.0
Улучшается слух бота. По умолчанию 1.0 Максимум 10
inner_detection_radius 512
Устанавливает Внутренний Радиус Обнаружения (IDR) для бота в единицах пикселя. IDR заставит бота реагировать на несколько вещей. Пример: Выстрелы в пределах IDR услышит бот.
Ai События
Spawn
То что будет происходить когда игрок родится
Enemysight
То что напишите в этом событии будет срабатывать когда бот увидит вас
Sight
То что напишите здесь сработает когда бот увидит другого бота в состоянии тревоги
Enemydead
То что напишите здесь сработает когда бот увидит другого мертвого бота
Trigger <событие>
Используйте это ключевое слово если хотите событие активировать во время игры
Pain <Осталось>
Используется для вызова когда у игрока останется определенное количество здоровья
death
Используется для вызова когда бот умрет
enemysightcorpse
Если бот увидит вражеского трупа вызывается эта функция
Friendlysightcorpse
Если бот увидит дружественный труп вызывается эта функция
statechange <Существующее состояние> <Состояние в результате>
relaxed query – Активируется если у бота поменяется состояние от расслабленного до сомнительного
relaxed alert - Активируется если у бота поменяется состояние от расслабленного до тревожного
relaxed combat - Активируется если у бота поменяется состояние от расслабленного до боевого
query relaxed – Активируется если бот посчитает что игрок умер и успокоится
query alert – Активируется если бот посчитает что он что то слышал или видел
query combat - Активируется если бот сразу начнет войну
alert combat – Активируется если бот начнет войну из состояния тревоги
combat alert – Активируется если бот поменяет состояние войны на тревожную
bulletimpact
Эта функция вызовется если бот увидит пулю
inspectbodystart [ai имя]
Эта функция вызовется когда бот увидит труп.. Вы можете поместить сюда имена тех трупов которые бот будет игнорировать. Так же вы можете написать сюда ключевое слово Deny (Отрицание) тогда бот будет игнорировать всех трупов
inspectsoundstart
Эта функция вызовется когда бот услышит какой либо звук. Вы можете написать сюда Deny тогда бот будет делать вид что ничего не слышал
Playerstart
Эта функция сработает когда игрок нажмет стрелку и начнется игра
Fakedeath
Вы наверное знаете что зомби надо убивать 2 раза так вот эта функция активируется когда зомби умрет 1-й раз
Attacksound
Это сработает если один бот услышит как воюет другой бот. Вы так же можете отрицать эту функцию
Inspectfriendlycombatstart
Это сработает если бот увидит как его товарищ воюет
Ai Команды
gotomarker <Имя маркера> [firetarget] [noattack] [nostop]
Бот пойдет от одного маркера к другому в зависимости от вашей команды.
Firetarget – пойдет атакуя игрока (если видит)
Noattack – пойдет не атакую игрока
Nostop – пойдет не останавливаясь
Runtomarker
Точно тоже что и выше только побежит
Walktomarker
Точно тоже что и выше только будет ходить
Crouchtomarker
Точно то же что и выше только пойдет прыгнувшись
gotocast [firetarget] [noattack]
Следить за объектом атакуя или не атакуя. Вы можете выбрать
Runtocast
Точно то же что и выше только следить будет бегом
Walktocast
Точно то же что и выше только следить будет ходьбой
Crouchtocast
Точно то же что и выше только следить будет прыгнувшись
wait <время в секундах>
Бот будет ждать сколько вы скажете только в секундах
trigger
Активирует скрипт мувер в определенном случае т.е когда вы скажете в событиях
playsound
Воспроизводить звук. Сначала вводите путь к звуку потом имя скрипт мувера
Как показывается на верху в знаках <>
noattack <время в секундах>
Не атаковать определенное время
playanim [legs/torso/both]
Проиграть анимацию. Пишите команды для рук ног и торса
setammo <Название> <количество>
Дать патронов. Пишите название патронов и количество
selectweapon <название оружия>
Выделить оружие
giveweapon <название оружия>
Дать оружие игроку или боту
givearmor <имя брони>
Дать броню боту или игроку пишите каску и бронежилет
giveinventory <название инвентаря>
Дать инвентарь игроку или боту
takeweapon <название оружия>
Взять оружие в руки
alertentity
Активация объектов в карте обычно релешки
Savegame
Сохроняет игру для игрока
fireattarget <имя бота> [время в секундах]
Атакует цель
godmode
Режим бога для бота или игрока
Missionfailed
Миссия проваливается
objectivemet
Это уведомляет игрока что он выполнил цель
objectiveneeded
Это используется для того чтобы сказать игроку сколько целей ему надо выполнить чтобы пройти уровень
noaidamage
Это говорит боту будет ли действовать огонь другого бота
print
Это напечатает текст в консоли
facetargetangles
Это скажет повернутся боту туда куда смотрит аи маркер поставленный в Радианте
changelevel [nostats] [persistant]
Это поменяет уровень если поставите persistant весь инвентарь перейдет к следующему уровню
Foundsecret
Нахождение секретов
nosight <время в секундах>
Это сделает A.I. Слепым какое то время.
Noavoid
Это скажет боту не избегать чего оибо в карте Например : скрипт муверы
Avoid
Это скажет боту избегать все
attrib
Так вы можете поменять какой либо атрибут бота. Исключение: начальное здоровье
statetype
Это поменяет состояние бота на тревожное
knockback
Боту будет на все пофиг т.е он не будет ни на что реагировать пофигист короче
Cigarette
Курит не курит:D
sethealth
Помните я выше говорил что здоровье не поменять теперь это возможно но только таким способом
notarget
Так вы можете активировать нотаргет как для бота так и для игрока
startcam
Запустить камеру куажите путь только
Stopcam
Остановить камеру
mu_start
Так можете запустить музыку. Она находится в главном паке
mu_stop
так можете музыку остановить
pushaway
Это используется, чтобы отодвинуть энтайт, которое является перед ботом Пример; village1, когда Кесслер выдвигает игрока из пути, если игрок попробует блокировать его.
Мануал составил Kes$leR
Еще несколько статей by Kes$leR
Как сделать чтобы определенный бот разрушил стену
Короче говоря чтобы сделать этот трюк вам понадобится :
1.Стена разрушающаяся
2.Бот разрушающий стену
3.Триггер активирующий разрушение стены ботом
4.Цель для бота
Итак рядом с вашей стеной поставьте парочку info_notnull`ов
Найти ее вы можете нажав ПКМ в каком либо 2д окне.
Теперь если вы поставили нотнул пробейте в его свойствах следующее
Key: targetname Value: her1 … Если вы поставили несколько нотнулов то дайте им св-ва her1 her2 her3…И расположить вы их должны там где ваша разрушающаяся стена.
Если вы ни самый настоящий тупарик вы должны понимать что ваш бот будет стрелять туда где ваш нотнул и это является его целью..
еперь сделайте триггер пробейте Key: ainame Value: player Key: target Value : heraction
Перейдем к подготовке бота пробить ему надо следующее:
Key: ainame Value: hernik.. если вы у вас действительно есть желание научится маппить то вы должны знать что я только что сделал.
Теперь надо написать аи-скрипт.
Туториалы by Astrol (печатается с его письменного разрешения)
Текстовые листы
Итак в игре мы можем часто увидеть всякие разные таблички, листы которые содержат текст.
Сегодня мы сделаем то же самое.
Итак для начала в Radiante создайте: item --> item_clipboard
В нем пишем следующие ключи:
Сначала ставим галочку в параметре Persistant
Далее пишем: key: popup
Volume: testtext
В этот параметр мы ввели название нашего листка все находятся в ui/clipboard.menu
Теперь заходим туда и копируем любой блокнот я взял вот этот:
Туториалы by Astrol ч.2
Создаем защиту с помощью шутеров.
Такой метод тоже используется в карте xlabs вспомните как электрические лучи не дают пройти нам через дверь, так сейчас мы создадим точно такую же, можно использовать огонь, ракеты, гранаты и т.д место электрических лучей.
Описывать буду только новое, а как создавать кнопки и другое все описано выше.
Итак для начала создайте три шутера shooter--->>>shooter_tesla вы можете выбрать другое.
Так же можете создать и два и один как вам угодно.
http://img404.errorurl.us/my.php?image=123re7.jpg
Далее создайте info-->>info_notnull тоже три и над каждым шутером как показано на рисунке.
http://img69.errorurl.us/my.php?image=1233415xu0.jpg
Теперь создаем target-->>target_speaker это делает звук, который мы укажем позже, поставьте его возле ваших шотеров.
И наконец, создайте браш с размером всех трех шотеров и высатой ваших нулов как показазно на рисунке и дайте ему текстуру common-->>trigger. Затем задайте ему функцию trigger-->>trigger_hurt.
http://img411.errorurl.us/my.php?image=12334523ob9.jpg
Теперь займемся свойствами этих объектов.
Сначала выделите все три шутера и откроем их свойства.
Там вводим следующeе:
Спасибо креатор все мои статьи перенес =)
Некоторые советы при маппинге карт:
1. Не используйтесь функции HOLLOW, ROTATING они приводят к мелким брашам, которые замедляют компиляцию и приводят к плохому FPS в игре
FPS - число кадров в секунду.
2. Все невидимые грани поверхности обрисовывайте текстурами сaulk из common-->caulk для улучшения компиляции и FPS в игре.
3. Мелкие браши делайте деталями (Для этого выделите ваш маленький браш и нажмите на правую кнопку там выберите Make detail) для улучшения компиляции и FPS в игре.
АИ скриптинг: двойной кольт
Небольшая вводная
На карте sfm нам даются 2 кольта. Суперская вещь, правда? Один мой друган прошел с dual кольтами всю оставшуюсю игру (по крайней мере он мне так сказал). Как же его заскриптить? Давайте вместе разбираться.
Ход работы
Двойной кольт у игрока
Создаем для карты mapa файл mapa.ai (хоть тем же блокнотом). И вводим скрипт:
Ты бы написал что обозначает каждая строка, например:
giveweapon weapon_colt \\ Добавляет указанное оружие
giveweapon weapon_colt \\ Добавляет указанное оружие (В нашем случаи копию надо писать для 2 кольтов)
setammo ammo_45cal 999 \\ Добавляет указанные патроны
selectweapon weapon_akimbo \\ Выделяет указанное оружие (Которое будет стоять первоночально)
Когда я был еще новеньким мапером мне все, что ты там написал было бы непонятно.
Что касается wait 200 совсем ненужно, как и setammo ammo_grenades 1 и statetype alert.
И вообще данная статья неимеет к мапингу никого отношения, все статьи по редактированию и созданию АИ наверху.
Astrol, как раз-таки имеет. Это частный случай АИ-программинга, с которым могут возникнуть трудности.Может быть, кому-то захочется вооружить ботов двойным кольтом. Так что - без претензий.
Как сделать качественное радио
1.Мы создадим браш более-менее похожий на радио.
2. Поставте брашу радио функция разрушения func_explosive.
Теперь нажмите N (Entity) поставте галочки в окошках noblockaas и useshader, далее пишите:
Key: health
Value: 10
Key: mass
Value: 30
Key: type
Value: metal
Напоминаю что параметр health - это значение жизней ( по умолчанию 100)
Ключ mass - это сколько будет оставаться останков от нашего радио ( по умолчанию 75)
Ключ type - это тип в нашем случае это метал ( по умолчанию дерево)
3. Создайте target_relay и поставте неподалёку от радио ( неважно где оно будет это для удобства)
4.Теперь выделете радио, затем реле и нажмите Ctrl + K, мы связали объекты в такой последовательности: Радио-->Реле. Стрелка должна быть от радио до реле, если у вас наоборот, то вы не правельно связали объекты.
5.Хорошо пол дела мы сделали теперь мы поставим target_effect (поставте рядом с реле), теперь нажмите N и поставте галку в окошке explode (это будет означать что мы поставили эффект взрыва).
6. Последнее наше действие свяжите target_relay-->target_effect. После того как мы связали выделете эффект и поставте его в середину радио.
Если вы хотите более реалистичного радио, тогда выполняйте следущие пункты:
1. Создайте target_speaker, нажмите N и поставте галку looped_on это будет означать что наш звук будет бесконечно повторятся.
Вводите следущее:
Key: noise
Value: sound\world\amb_radio_03.wav
2. Свяжите так: target_relay-->target_speaker.
Теперь у нас получилось радио которое разбивается и взрывается, но пока оно не разбилось издаёт звуки. Идите в игру и любуйтесь!!!
Manual by uXeGen
Помогите люди плизз !!! У меня в ентити нету таких папок как NPC и FX !
(Тоесть немогу создавать Нпс) Это у меня редактор левый или я что-то не доделал ?
Там нет такой штуки. Все npc хранятся в разделе ai
Форум Invision Power Board (http://nulled.cc)
© Invision Power Services (http://nulled.cc)