Добро пожаловать на форумы Боевого Народа (бывший форум Live.CNews.ru)!

ВАЖНЫЕ ТЕМЫ: FAQ по переезду и восстановлению учеток | Ошибки и глюки форума.
О проблемах с учетными записями писать СЮДА.
Мануалы по маппингу - Форумы Боевого Народа
IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
Мануалы по маппингу, Наши советы, переводы туториалов, статей
сообщение 15.2.2006, 8:07
Сообщение #1





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Использование Areaportal’ов

Если перед игроком находится дверь, то движок игры просчитывает все, что находится за ней, хотя игрок этого и не видит – естественно это сильно снижает фпс. Чтобы этого избежать – нужно использовать Areaportal – текстуру из папки common, которая будет блокировать просчет графики за дверью. Areaportal сработает как триггер когда вы задействуете дверь и «включит» пространство за ней для вашего обозрения.

Правило №1Areaportal должен находиться внутри дверей (func_door и func_door_rotating) чтобы работать. На рисунке ниже – простой пример скользящей двери (func_door) и Areaportal’а с ней. Заметьте, что границы Areaportal’а больше границ двери – это допуск для того чтобы открылась дверь.
рис1
рис2

Правило №2Areaportal не должен касаться пустоты. Обращайтесь с ним как с другим телом однако не углубляйте его значительно в пустоту на карте – он не будет работать правильно.

Правило №3Areaportal должен использоваться в глухом объеме. Пример: комната с 4-мя стенами и дверью с Areaportal’ом – работает хорошо, но если вы добавляете в комнату окно, Areaportal работать не будет вообще.

Пример использования Areaportal’а:

Ниже приведен образец карты с дверями и Areaportal’ами в них.
рис3

Вы можете видеть что пространство за дверями отрисовывается только в моменты когда игрок подходит к двери или открывает ее.
рис4
рис5
рис6
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 16.2.2006, 8:12
Сообщение #2





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Несколько текстур, которые используются с целью получить тот или иной эффект в игре.

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.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 16.2.2006, 20:44
Сообщение #3





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Делаем арки

Рисуем браш размерами с предпологаемую арку.

Затем идём в закладку Curve и там выбираем End cap...

Жмём, получаем арку... В таком варианте её можно конечно использовать для создания многих объектов. Но чаще всего нам нужны арки других форм... Для этого жмём вот на эту кнопочку, выскочит вот такое окошко

В нём жмём например Inverted Endcap, и получаем такую арку.... Чтоб более точно подогнать арку под нужный размер, селектируем её и нажимаем клавишу V - выделятся вершины арки, перемещая которые, придаём арке нужный размер и форму.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 16.2.2006, 21:36
Сообщение #4





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Делаем цилиндры, трубы, провода

Всё как и в случае с арками... сначала - рисуем браш нужного размера, идём в закладку Curve и там выбираем Cylinder... Получаем то, что хотели...

Если цилиндр нужен какой-то хитрой формы, то жмём не на Cylinder, а на More Cylinder и выбираем нужный вариант. Далее, заселектировав полученный цилиндр, нажав V и меняя проекции по осям, получаем возможность гнуть его и изменять форму. Чтоб вывернуть его текстурой внутрь, например для создания шахты канализации, достаточно нажать комбинацию Ctrl+i
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 18.2.2006, 3:46
Сообщение #5





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Полезные статьи:

Советы начинающим дизайнерам уровней экшн игр.

Дизайн игры. Полезные мелочи при разработке РЕАЛИСТИЧНЫХ 3D игр.

Создание текстурных разверток

Творческий подход в рисовании текстур.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 18.2.2006, 13:22
Сообщение #6





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Делаем арки

Добавил бы очень важный момент ... как наложить правильно текстуру... Ну обычно боковые стенки арки это части стен (кирпич) а внутренняя поверхность (сама арка) это например штукатурка... Дак вот фокус в том что заселектировав арку и многие другие фигуры из бизь мы можем получить доступ к отдельным частям фигуры .. Происходит это при нажатии клавиши TAB Т.е. селектируя отдельные поверхности придаем им нужную текстуру...
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Хэш
сообщение 19.2.2006, 3:59
Сообщение #7


Сталкер
********

Группа: Администраторы
Сообщений: 8012
Регистрация: 10.8.2017
Пользователь №: 745



Создаём ландшафты
----
начнем. сначала вы естественно должны скачать 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!)
(не знаю как это перевести с технической точки зрения. вам виднее smile.gif )
остальные настройки оставьте по дефолту и жмите ОК.

теперь создайте heightmap. используйте любой графический редактор. изображение должно быть 8-bit grayscale и размером 33x33 пикселя. как например на картинке:

какого хрена, спросите вы. неужели из такой маленькой пикчи можно сделать территорию? да, расслабтесь, это так.

возвратитесь в EasyGen, выберите file>import>heightmap
если у вас не установлен путь до ваших bitmap, то укажите путь до них вручную.
откроется небольшое окно, в правом углу увидете цифры. это высота карты. дефолтным значением стоит 256, что является гладким покрытием. изменив значение на 1024, вы можете изменять рельеф. должно получиться что-то типа этого:

можете крутить ландшафт как вам удобно, зажимая левую и правую кнопки мышки.
теперь давайте поменяем ландшафт под ваши нужды. на сетке ландшафта нажмиет на modifier. функция scale отвечает за вытягивание по осям. удерживая shift + правую кнопку мышки, вытягивайте ландшафт вниз или вверх.


теперь, коглда у вас готов ландшафт, приступим к его текстурированию. если у вас не распакованы текстуры, придется это сделать. текстуры ландшафта брать из wolfenstein\main\pak0.pk3. добавлять menu terrain>add folder и указать директорию с текстурами. текстуры должны отображаться в левом углу окна.
что бы создать свою alphamap текстуру, кликните на одном из черных полей. запустится визард, для установки цвета, задайте зеленый. затем из директории текстур выберите что нить погрязнее smile.gif сделайте то-же самое для двух других текстур. я выбрал ГРЯЗЬ и СКАЛА.


теперь вы имеете 3 текстуры для закрашивания ландшафта. выберите текстуру которая вам нарвится, кликая по цветам которые вы им задали, зажмите Ctrl, shift и левую кнопку мышки и закрасьте текстурой ваш ландшафт. примерно так это выглядит:
(кликните для увеличения)


почти все готово, надо лишь экспортировать вашу карту в Radiant. кликните на exp map в меню. в окне введите значения как на скриншоте:


(это на техническом языке. сами переводите smile.gif )
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.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 20.2.2006, 1:55
Сообщение #8





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Хотелось бы добавить... Размер битмапа (33х33) не от балды Он должен соответствовать разметке территории причем к размеру каартинки прибавляется по 1 пикслю т.е если территория делится на сетку 32х32 квадрата, то картинка 33х33 пикселя... Либо надо использовать кратность..
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 7.3.2006, 3:46
Сообщение #9





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Вот самые распространённые ошибки компиляции, их причины и способы устранения. Нужно перевести на человеческий язык :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.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 26.3.2006, 18:04
Сообщение #10





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Делаем двери

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 - дверь. Потом повторяем эту операцию с объектами по другую сторону двери...
В этом случае, при приближении немцев - дверь будет открываться и они не будут залипать...
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 5.4.2006, 18:17
Сообщение #11





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



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/N7c6ec8c67fd...%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/N7c6ec8c67fd...%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/N7c6ec8c67fd...%2FSHOT_800.JPG

Поскольку Вы можете видеть, последняя линия команд называет ту же самую функцию снова, и снова таким образом начинает процесс, эффективно создавая своего рода цикл. Если Вы хотели, бы остановить его достаточно удалить последнюю строку

Теперь, когда Вы, игрок нажимает в игре кнопку, это должно предназначаться для target_script_trigger, который называет функцию function2 в пределах скрипта в .ai файле. Функция function2 тогда имеет команду в этом, которое называется функцию function1 и в скрипте script1 .script файла. Команды там тогда фактически говорят вашему script_mover entity`у, что они должны сделать и куда пойти.

Сообщение отредактировал kessler - 5.4.2006, 18:46
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 7.4.2006, 10:58
Сообщение #12





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Цилиндры

Для создания брашей с цилиндрической формы необходимо создать обыкновенный браш. А затем сделать следуещее преобразование Curve-Cylinder. Тут же ваш браш превратиться в цилиндр, основание которого будет точно вписываться в основание браша - основы. Для получения цилиндра с идельно круглым оснаванием, нужно просто создавать его из браша с квадратным основанием.
В любом случае вы получите цилиндр без поперечных образующих. То есть такой простой цилиндр нельзя преобразовывать, перемещая образуещие его вершины. ( мнимые вершины если быть точнее ).

При необходимости в дальнейшем искажать внешний вид вашего цилиндра, воспользуйтесь следующим меню: Curve-More Cylinders-Dense Cylinder (цилиндр с одной образующей поперечной окружностью, делящей его пополам.
Curve More Cylinders- Very Dense Cylinder( цилиндр с тремя образующими поперечными окружностьями, делящими его на четыре равные части).
Пукт Curve-More Cylinders- Squre Cylinder Преобразует ваш ЛЮБОЙ браш в параллелепипед по габаритным размерам.

Сообщение отредактировал Аркот 24 - 7.4.2006, 11:13
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 12.4.2006, 0:31
Сообщение #13





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Ошибки компиляции - 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.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 12.4.2006, 9:59
Сообщение #14





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



делаем радар

Создай браш с видом радара. В центре создай будущую ось вращения и наложи на неё текстуру Common-origin. Теперь выдели всё полученное и кликни на 2D окне правой кнопкой мыши. В появившимся контектном окне выбери пункт Func-Func_Rotating. В принципе на этом всё. Можно добавить и поэкспериментировать с параметром Speed (скорость вращения) а так же создать другую ось вращения. Если желаешь создать вентилятор на стене, то поставь галочку в меню (вызывается кнопкой N) X_axis (Y-axis). Хочешь убить попавшего в радар человека, добавляй параметр dmg и пиши нужное число отнимемых жизней.

Осей вращения всего три и для них существует одно плохое правило - напрвление вращения ВСЕГДА происходит по часовой стрелке, если наблюдать за ним от центра осей координат в ПОЛОЖИТЕЛЬНОМ направлении. Поясню. Если на полу запустить шестерёнку, то на виде сверху она будет крутиться против часовой стрелки. Можно конечно сделать любую ось вращения и задать любое направление, но это выходит за рамки данного мануала.

Сообщение отредактировал Аркот 24 - 12.4.2006, 10:08
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 29.12.2007, 16:38
Сообщение #15





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



ВАЖНЫЕ МЕЛОЧИ ПРИ СОЗДАНИИ ДВЕРЕЙ
Данные фишки предназначены для тех, кто выполнил все по статье krot'a "Делаем двери", но у него проблемы с текстурами (они не натягиваются толком на браш двери и его надо увеличивать, чтоб было все видно). Что же делать?
1. Сделайте все, как написано в статье Krot'a. Если у вас текстура полностью не вытянулась - не беда, щас будем исправлять
2. Берем наш браш двери и нажимаем S. В появившемся окне жмем "Fit". Вуаля! Только обратите внимание, после нажатия fit текстура может быть отраженной по горизонтали (важно при создании флагов и табличек). Эта проблема решается только изменением места вашего браша. Если вы делаете дверь, то вам ничего в положении самой двери менять не надо, только в положении origin-браша.
3. Если Вас не устраивает расположение текстур и Вы хотите сделать их повыше/пониже не меняя положения браша, используйте Shift+стрелки.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 4.1.2008, 9:43
Сообщение #16





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



После того как мы ушли от них там был и кесслер и многие короче, я бы хотел занести на этот форум те статьи которые писали мы у них.

АИ СКРИПТИНГ ЧАСТЬ №1

Этот маленький туториал научит вас программировать АИ для уровней RTCW..

АИ скриптинг - это программирование ботов т.е.вы сможете сделать их более умными в том плане что они будут выполнять разные движения.Например курить сиграрету, или ходить по указанным вами маркерам так же иметь определенное количество здоровья атаковывать врага более обдуманно. или же убивать самого себя(камикадезе) :-)

если вы хотите стать маппером не пытайтесь отбросить скриптинг потому что ни одна ваша карта на получится чумавой без умных ботов.


Итак что вам понадобится....

1.RTCW установленная на вашем компе.
2.GTKRadiant, редактор уровней.
3.И любой текстовый редактор.
4.И еще - терпение , время . понимающая вас семья , а так же сильный кофе



Первая карта

Мы начинаем с простой карты.Запустите Радиант и создайте маленький скайбокс..Сделайте ее HOLOW и поставьте info_player_start (направление 180)...
и постарайтесь сделать землю по которой будет ходить игрок(не надо особо мудрить потому что эта ваша учебная карта)
Нам просто нужно место где бот сможет передвигатся.А вы в свою очередь должны боту сказать куда он пойдет и что сделает.
Для этого поставьте АИ-Маркер(ai_marker) и дайте какое нибудь имя..

Если вы хотите проверить что у вас получилось в игре, вы можете скомпилировать ее с помошью q3map или q3map2. Я назвал свою карту tut.mapЧтобы загрузить вашу карту :
1.Запуск RTCW
2.Нажимаете"Ё" и пишете "spdevmap tut"..

Это очень плохо на вашей карте никого нету кого можно было бы грохнутьsmile.gif.Вам нужен кто то чтобы убить его.Так вот этим мы сейчас и займемся.


Ваш первый скрипт

Откройте ваш любимый текстовый редактор и создайте новый файл под именем Tut.ai(помните что ваш аи файл должен называтся так же как ваш бсп файл)
Первое что вы должны сделать - это заполнить шапку

//
//ai scripting
//map: tut.map
//last edited by: KessLeR
//


Вы наверное заметили эти два слеша в начале каждой строки - это говорит о том что этот текст будет игнорироватся компилятором.
Если вам лень вы можете ее и не писать. Но спустя некоторое время вы не совсем будете помнить к которой карте относится этот скрипт. уж лучше поверьте мне лучше вам не ленится.(Не забывайте что Лень все портит)

Далее вам надо добавить очень важную часть АИ т.е. игрока...
И делается это таким образом


player
{
}



Обычно АИ идентифицируется под под именами "nazi1" "nazi2" "officer1" Или если хотите можете целую эпопею написать но вы этого не сделаете :-)
Надпись Player говорит о том что написанный в фигурных скобках текст будет касатся только плеера..
если вы хоть чуток разбираетесь в программировании то вы поймете что многое взаимствованно с языка "С"
если вы хорошо знаете английский можно считать что на 50% писать скрипты вы умеете :-)

Так теперь мы дадим игроку оружие!!!!

player
{
playerstart
{
// Оружие
giveweapon weapon_sten
// патроны
setammo ammo_9mm 64
setclip weapon_sten 32
// Оружие которое будет у игрока в руках
selectweapon weapon_sten
}
}



Итак что это????

Внутри процедуры playerstart говорится только о том что произойдет когда игрок войдет в игру.

Первое.Нам нужно оружие

giveweapon weapon_sten

Если вы еще добавите то что дается ниже у вашего игрока будут обоймы для стена

setammo ammo_9mm 64

А если вы введете строку что ниже находится то у игрока с каждым респауном будет случайное количество патронов

setclip weapon_sten 32

Если вы хотите чтоб у игрока в начале игры был в руках стен то надо добавить одну простенькую строчку

selectweapon weapon_sten

В конце до концов Оружие у вас есть УРААААА!!!

На данный момент у вас должно быть три файла карты в директории /wolfenstein/main/maps/ tut.bsp, tut_b0.aas и tut_b1.aas. Сохраните ваш tut.ai в этой же директории.И запустите Вольф.опустите занавес и наберите там spdevmap tut

Вы получили оружие???

Так же вы можете еще позволить себе пару штук разных автоматов или пистолетов или нож... короче все чем можно убить фашиста

Например если вы введете giveweapon weapon_knife в процедуру playerstart У игрока появится нож..

Вы еще можете добавлять и второстеппенные предметы..


// Дополнительно
setarmor 50
giveinventory key_binocs


эти две строки способствуют тому чтобы у вас был бронежилет и бинокль.

Сохраните ваш Tut.ai и при запуске вашей карты вы увидите что теперь у вас есть нож бинокль и 50% брони . Разве это не прекрасно :-)

Добавление музыки


Тут различаются два вида музыки: та которая будет после загрузки карты и так которая будет уже в течении игры.ее обычно называют in-game music

Ваш скрипт должен выглядеть примерно так заметьте что я добавил туда процедуру spawn

//
//ai scripting
//map: tut.map
//last edited by:KessLeR
//

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
// misc
setarmor 50
giveinventory key_binocs
}
}



Сохраните и попробуйте запустить игру разве это не прекрасно..Теперь еще музыка играет :-)

mu_fade 0 1000
mu_queue sound/music/m_mission // Запускается музыка


Что означает первая строка мы с вами поговорим позже..
Вторая говорит о том чтоб запустилась музыка которая находится в папке sound/music/m_mission

Добавляем Дружеского АИ

На данный момент моя карта выглядит так

Я добавил туда "ai_partisan" Вызвал его окно свойств и напечатал следующее:

Вы можете поварачивать игрока куда хотите
1.key: angle
value: 360
Морда вашего друга - аи
2.key: head
value: kesler
Его форма
3.key: skin
value: partisan\sfm1
Его имя(кодовое)
4.key: ainame
value: party1



Если вам охота вы можете запустить игру и позырить на кесслера...Вы заметите что у него в руках Томпсон...Не волнуйтесь мы в скором времени сможем поменять его

Любой бот в игре имеет оружие которое дается ему по умолчанию

Добавьте процедуру party1 - будьте внимательны добавлять его надо ни в процедуре Player а надо создать новую :
Так же добавьте в нее еще две процедуры: attributes и spawn
Вы наверное поняли что процедура party1 относится к нашему другу АИ - Помните мы дали ему кодовое имя party1

Процедура attributes. Здесь будут писаться все индивидуальные данные бота: меткость зрение слух и все такое.
Процедура spawn Здесь мы напишем об оружиях которые наш Кесслер получит.


party1
{
attributes
{
}

spawn
{
}
}

------------


party1
{
attributes
{
}

spawn
{
takeweapon weapon_thompson // Томпсон будет в руках кесслера
giveweapon weapon_luger // пистолет
setclip weapon_luger 8 // 8 патронов для пистолета
setammo ammo_9mm 16 // 16 патронов по 9мм
}
}



исходный код должен выглядеть так:



//
//ai scripting
//map: tut.map
//last edited by:KessLeR
//

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мм
}
}



Запустите игру и проверьте.Ударьте кеслера по ноге..И вы заметите что он сразу вытащит Люгер..

Мануал составил Kes$LeR

Сообщение отредактировал Astrol - 4.1.2008, 10:12
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 4.1.2008, 10:09
Сообщение #17





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



АИ СКРИПТИНГ Часть 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
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 4.1.2008, 10:27
Сообщение #18





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Создаем лампочку которая может включаться и выключаться.

Для начала у вас в карте должен быть рубильник или рычаг, кнопка ну что то в этом роде с помощью которой будет врубаться наш рубильник…
На данном уровне будем считать, что он у вас есть
Итак начинаем..
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

Сообщение отредактировал Astrol - 4.1.2008, 10:28
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 4.1.2008, 10:38
Сообщение #19





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Ключевые слова в программировании Аи для Вольфа

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
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 4.1.2008, 11:43
Сообщение #20





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Еще несколько статей 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.. если вы у вас действительно есть желание научится маппить то вы должны знать что я только что сделал.


Теперь надо написать аи-скрипт.
Код
player
{
spawn
{
objectivesneeded 1
abort_if_loadgame
mu_start sound/music/l_briefing_1
}

playerstart
{
mu_fade 0 1500
mu_queue sound/music/m_situation
giveweapon weapon_mauserrifle
}


Trigger botaction1
{
Trigger hernik botaction1
}
}

Bot1
{

attributes
{
aim_accuracy 0.2
aggression 0.9
starting_health 20
fov 120
}

spawn
{
accum 0 set 0
setammo ammo_grenades 0
statetype alert
wait 100
gotomarker zone3p3
}




trigger botaction1
{
fireattarget her1 800
fireattarget her2 800

}


}


Повреждаемый материал

Этот тутор научит вас разрушать – это слово не означает просто разрушение, но и получить надлежащие развалины, как стена которая в последствии будет иметь трещину
Теперь нам нужно сделать небольшую комнату


Постарайтесь сделать как показано на рисунке с разрушенной дверью в середине. Пока не обращайте
внимание на стрелку.


Теперь выделите все части вашей разрушенной двери и нажав ПКМ сделайте из нее func_static . Теперь нажмите N чтобы увидеть свойства этого энтайта(после того как вы сделали из нее func_static она стала энтайтом) Теперь этому вашему энтайту дайте свойства key : targetname value: debris поставьте галочку на start_invis.



Держите вашу дверь взломанной и нажмите H это на время скроет вашу дверь чтоб она вам не мешала. Когда захотите вы за просто можете вернуть ее нажав shift-H
Теперь вы должны сделать еще одну дверь какой она была до взрыва
Вы должны сделать простой браш а не полную функциональную дверь с текстурой двери и все. Щелкните
ПКМ и сделайте из нее func_explosive


И пишите св-ва:

target debris Health 30 Type metal Mass 100

Теперь нажмите Шифт – Н и вы увидите что ваша целая дверь соединилась с разрушенной


Сообщение отредактировал WSCreator - 4.1.2008, 11:45
Перейти в начало страницы
Вставить ник
+Цитировать сообщение

2 страниц V   1 2 >
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 16.4.2024, 16:37
Консультации адвоката по уголовным делам. Бесплатно. По всей России