Воскресенье, 22.09.2024, 14:34
Приветствую Вас Гость | RSS
F.R.O.N.T.
Главная | Статьи | Регистрация | Вход
Меню сайта
Все новые статьи находяться на форуме!!! Видеть их могут только рарегистрированые пользователи...
Категории каталога
Мои статьи [28] Сценарии [0]
Пишите сюда свои сцинарии
Модострой [152]
Статьи по созданию модов
КАК СНЯТЬ ФИЛЬМ??? [0]
Статьи о том как снять фильмы
Мини-чат
Наш опрос
Нашли на скйте то, что искали?
1. Да, я нашел информацию о тм как сделать мод
2. Нет, я не нашел информацию о тм как сделать мод
3. Нет, я не качал мод
4. Нет, я не нашел информацию о том, как снять фильм
5. Нет, я не скачал фильм
6. Да, я нашел информацию о том, как снять фильм
7. Да, я скачал мод
8. Да, я скачал фильм
Всего ответов: 65
Главная » Статьи » Модострой

Информация для создателей скриптов. Часть 1

Составитель: Andrey Fidrya (Zmey), af@svitonline.com

 В каждом скрипте должны быть:

 action:initialize() – вызывается в момент включения схемы по GOAP.

Инициализировать переменные здесь НЕЛЬЗЯ. Нужно провести установку callback-ов, которые будет использовать скрипт. В самом конце функции нужно вызвать acton:reset_scheme()

 

action:reset_scheme() – вызывается в момент включения схемы другим скриптом (gulag и т.п.), также вызывается из initialize при включении схемы по GOAP

Вся инициализация должна производиться в reset_scheme(), а не в initialize()!

 action:finalize() – вызывается в момент выключения схемы по GOAP. Снять проставленные в initialize callback-и.

 function add_to_binder(npc, char_ini) – биндит схему, только если char_ini == nil (это значит, что биндинг запрошен другим скриптом), или сущестует секция с именем скрипта в custom_data, которая передана как char_ini

function set_scriptname(параметры) – настройка параметров скрипта. Параметры, вместо которых передан nil, берутся из customdata персонажа.

Работа с customdata:

            При чтении полей customdata, если поле не найдено, нужно выдавать сообщение об ошибке, а не тихо отключать скрипт. Сделать это можно с помощью функции xr_utils.abort(“сообщение”, параметры), которая действует аналогично printf, но выводит сообщение в MessageBox и останавливает игру.

Чтобы не переписывать парсинг заново в каждом скрипте, можно воспользоваться функциями из  xr_utils:

function conf_get_bool(char_ini, section, field, override, object, mandatory)

function conf_get_string(char_ini, section, field, override, object, mandatory)

function conf_get_number(char_ini, section, field, override, object, mandatory)

Например:

st.enabled = utils.conf_get_bool(char_ini, "guard", "enabled", enable, object, true)

Пример использования можно посмотреть в xr_guard.

Описание параметров – в xr_utils в месте, где определена функция.

В случае возникновения вопросов - обращаться к Змею (af@svitonline.com).

Перемещение:

За перемещение отвечает movement manager.

 

Пример использования – xr_walker.script.

 

1) В _init создается экземпляр movement manager-а:

            self.move_mgr = move_mgr.move_mgr()

2) В initialize грузим информацию о путях из их имен:

            self.path_walk_info = utils.path_parse_waypoints(self.st.path_walk)

            self.path_look_info = utils.path_parse_waypoints(self.st.path_look)

3) В reset_scheme инициализируем movement manager:

function move_mgr:reset(path_walk, path_walk_info, path_look, path_look_info,

team, mode, move_cb_info)

 

Здесь

            team – команда для синхронизации нескольких персонажей (произвольная текстовая строка)

 

            mode – таблица, поля которой задают начальный режим перемещения:

            { crouch = true/false, run = true/false, danger=true/false }

            move_cb_info – таблица, поля которой задают информацию о callback-методе, который будет вызван, если персонаж прибыл в точку, в которой установлено значение ret: { obj = объект, func = функция }

            obj – ссылка на объект класса, которому принадлежит функция, или nil, если функция определена вне класса.

            func – ссылка на функцию, которая будет вызвана.

 

Поля team, mode, move_cb задавать не обязательно.

 

4) В execute:

            self.move_mgr:update()

5) В finalize:

            self.move_mgr:finalize()

Переключение скорости и режима перемещения до прибытия в первый вейпоинт.

            Для того, чтобы сменить режим движения до прибытия в первый вейпоинт пути (например, переключиться с ходьбы на бег при каких-то условиях), выполните в своем скрипте в любой момент после reset-а:

            // ВНИМАНИЕвызывать update_movement_state при last_index

// не равном nil недопустимо!

if self.move_mgr.last_index == nil then

self.move_mgr.running = true / false

self.move_mgr.danger = true / false

self.move_mgr.crouch = true / false

            self.move_mgr:update_movement_state()

end 

            Примечание: в большинстве случаев переключать режим перемещения не понадобится. Рекомендуется задавать стартовый режим перемещения с помощью параметра mode функции reset(), а не менять его вышеописанным способом.

Использование callback:

            Функция-callback может быть как свободной функцией, так и членом класса.

            Прототип свободной функции имеет следующий вид:

function my_callback(self, mode, number)

            Прототип функции класса:

function class:my_callback(mode, number)

 

            Здесь в качестве первого параметра (self) будет передано значение поля obj таблицы move_cb_info, т.е. фактически это объект, которому принадлежит функция-callback.

Параметр mode может быть одним из:

move_mgr.arrival_before_rotation – если поле ret было задано в path_walk и коллбек был вызван сразу же по прибытию персонажа в точку, ДО поворота.

move_mgr.arrival_after_rotation – если поле ret было задано в path_look и коллбек был вызван после прибытия в точку path_walk и поворота в соответствующую точку path_look (в которой был задан ret).

            number – значение поля ret.

            В коллбеке можно прервать движение персонажа (остановить его, но нежелательно сбрасывать пути) и выполнять свои custom действия (апдейты movement manager-а при этом вызывать не нужно по понятным причинам). Для прерывания нормальной работы схемы с целью вмешательства в перемещение, нужно вернуть значение true из callback-а, после чего перестать вызывать апдейты. Если это не сделать – значения, которые Вы установите персонажу в коллбеке могут быть сбиты схемой сразу же по возврату из Вашего коллбека! Чтобы продолжить затем движение по маршруту, вызовите:

            self.move_mgr:update_movement_state() – это включит бег или ходьбу (в зависимости от настроек последней точки, в которой был персонаж)

            После чего продолжайте вызывать апдейты movement manager-а как обычно.

            Перед вызовом update_movement_state, можно также явно задать режим перемещения:

self.move_mgr.running = true / false

self.move_mgr.danger = true / false

self.move_mgr.crouch = true / false

            Если коллбек выполняет задачи, никак не влияющие на перемещение и персонажа в целом (например, просто ставит info portion), то из коллбека нужно вернуть nil или false. Вызов коллбека тогда останется для схемы незамеченным.

 

Взаимодействие path_walk c path_look:

            Прийдя на точку path_walk, где установлена какая-то комбинация флажков, сталкер найдет такую же комбинацию флажков в path_look и посмотрит в эту точку. Если же ни один флажок не установлен, сталкер пойдет дальше не останавливаясь.

Проверка текущего состояния персонажа:

Часто с персонажем должны взаимодействовать другие персонажи, например, follower-ы командира должны знать его состояние.

Движется ли персонаж в данный момент можно узнать, опросив у move_mgr переменную moving.

if self.move_mgr.moving then движется end

При этом, если moving == true, можно узнать подробности о перемещении:

if self.move_mgr.crouch then идет в присяде end

if self.move_mgr.running then бежит end

if self.move_mgr.danger then находится в состоянии danger end

            Если moving == false, то:

if self.move_mgr.standing_crouch then сидит end

if self.move_mgr.standing_danger then сидит в состоянии danger end



Категория: Модострой | Добавил: front (22.09.2009)
Просмотров: 1463 | Рейтинг: 3.0/1 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
счетчик посещенийсчетчик посещений
Друзья сайта
 
Фан сайт игры S.T.A.L.K.E.R.

Бар_У_границы_Зоны_бар_настоящего_сталкера!

Статистика

На портале: 1
Новичков: 1
Участников: 0

Copyright MyCorp © 2024