|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
Re: Скриптинг в Готике
Клево. И тебе спасибо, за постановку задачи и за то, что не поленился проверить. Теперь буду знать.
Вообще, мне кажется, нужно сделать факи по скриптингу некоторых игровых ситуаций. Конечно, поднимать всю тему тоже прикольно, иногда. Но все-таки часто требуется именно конкретное описание конкретного случая. Голову никто не отменял :), но время такой фак может сэкономить очень сильно.
Добавление от 08/09/05, в 15:54:46 Например:
Перемещение NPC по миру.
Вейпойнт.
Основа для перемещения - вейпойнт. Он устанавливается в спейсере, в том месте, которое нужно создателю мода. Причем для того, чтобы просто вставить NPC в мир, хватит и одного вейпойнта.
А чтобы он мог перемещаться по миру, нужны т.н. "связки" вейпойнтов. Это просто несколько вейпойнтов, связанных между собой путями - в спейсере они выглядят как тонкие красные линии между вейпойнтами.
Итоговый маршрут NPC - это путь по таким связкам, от одного вейпойнта к другому. Естественно, чтобы NPC дошел до пункта назначения, в связке не должно быть разрывов.
Вставка NPC в мир.
Чтобы вставить NPC в мир, нужно воспользоваться функцией Wld_InsertNPC().
У нее два параметра. Первый - имя intance NPC, который вставляется. Например - NONE_666_Ramirez
Второй - имя вейпойнта, на который будет вставляться наш NPC Например, "NW_XARDAS_TOWER_VALLEY_09"
Итого: Wld_InsertNPC(NONE_666_Ramirez,"NW_XARDAS_TOWER_VA LLEY_09");
Здесь есть некоторые тонкости.
1) У NPC, который вставляется, в описании обязательно должна присутствовать функция типа RTN_***. Например, [pre] func void Rtn_PreStart_666() { TA_Guard_Passage (8,0,22,0,"NW_FARM1_OUT_01"); TA_Guard_Passage (22,0,8,0,"NW_FARM1_OUT_01"); }; [/pre] 2) Параметр daily_routine обязательно должен присутствовать и ему должно быть назначено имя существующей функции [pre] daily_routine = Rtn_PreStart_666; [/pre] Иначе NPC просто не вставится в мир.
Отсюда следует еще одно: у NPC в описании обязательно должен присутствовать ID. [pre] ID = 666; [/pre]
Без ID или при его дублировании в описании другого NPC возможны ошибки при работе.
Перемещение NPC по миру.
Скриптовая основа - функция B_StartOtherRoutine() и функции типа RTN_*** конкретного NPC.
Как это использовать?
Простой пример: пишем, например, в теле диалога [pre] B_StartOtherRoutine(NONE_666_Ramirez,"q"); [/pre] Это означает, что для NPC с именем instance NONE_666_Ramirez была "включена" его RTN функция rtn_q_666(), в которой написано, что он должен делать, т.е. информация о вейпойнтах Туда он и пойдет, в зависимости от "внутренностей" RTN-функции.
Еще один способ - телепортация. Функция - AI_Teleport(). Работает ТОЛЬКО в связке с B_StartOtherRoutine(), то есть: сперва применяем AI_Teleport(), затем B_StartOtherRoutine(), причем имена вейпойнтов, использованных в этих функциях должны совпадать. То есть - если в AI_Teleport() указали вейпойнт "NW_X_01", то он должен быть в функции rtn_q_666, которая используется в B_StartOtherRoutine().
Уф, вроде все. Пишите исправления. :)
|