Это популярное сообщение. Malandrinus 615 Опубликовано 8 Июля 2009 Это популярное сообщение. Поделиться Опубликовано 8 Июля 2009 (изменено) В данной теме собраны сведения по скриптовой модели сталкера: функции и классы, методы и свойства, взаимосвязь классов и последовательность работы с ними, связь работы классов и файлов конфигураций. К наполнению темы приглашаются все желающие. В наполнении темы непосредственно участвовали и существенно мне помогли: @Monnoroch, @Kolmogor, @Unnamed Black Wolf, @меченый(стрелок), @IQDDD, @Kirag, @Taroz, @dan, @7.9, @Garry_Galler, @AKKK1, @Bak и много других людей. Скрытый текст Скрытый текст класс alife_simulator. Базовые операции с серверными объектами. Пространства имён. Глобальные функции для большого числа задач. "Создание своего класса" и "Наследование от экспортированных классов". Базовые сведения об объектно-ориентированном программировании для сталкера. Необходимо прочитать, для понимания темы про биндер и некоторых других. В одном посте: Общие слова об архитектуре и скриптовой модели сталкера "Класс object_binder" расширение онлайновых объектов, колбеки, сохранение состояния. "Класс net_packet" Регистрация скриптовых классов с помощью object_factory Серверные классы. Часть 1 Иерархия серверных классов, описание не закончено. Серверные классы. Часть 2 Картинка структуры наследования и несколько заключительных слов Клиентские классы Скрытый текст Класс game_object Интерфейс ко всем онлайновым (клиентским объектам) Класс hit для нанесения урона скриптом и другая информация (IQDDD) Некоторая информация по управлению путями патрулирования здесь (Kirag) и здесь (Taroz) Неполная информация по управлению памятью неписей с примером здесь (Bak) Физическая оболочка объектов (Garry_Galler) Пост о выборе (подборе) оружия НПС и стрельбы (*Shoker*) Скрытый текст Управление заданиями Класс CGameTask и другие вспомогательные классы и функции. Управление инфопорциями Функции, колбеки, форматы файлов Список специальных системных инфопорций (Unnamed Black Wolf) Система профилей и алгоритм генерации имён. Форматы файлов, функции Дополнительная информация по параметрам профилей terrain_sect (Kolmogor) Диалоги. Часть 1 Форматы файлов, базовые сведения Диалоги. Часть 2 Скриптовые диалоги Диалоги. Часть 3 Тематическая подборка функций управления диалогами Скрытый текст Функции времени Тематическая подборка функций, связанных с управлением игровым временем. Класс CTime Вспомогательный класс для управления игровым временем Полезная скриптовая функция с использованием CTime (Garry_Galler) Скрытый текст class ini_file (меченый(стрелок)) Класс FS и CSavedGameWrapper Бинарный доступ к файлам, в том числе в игровых архивах, управление сохранёнными играми. Скрипт уровня. Забытая фишка с колбеком на заход на уровень Класс vector Некоторая полезная информация о разных вещах (меченый(стрелок)) "Класс render_device" Направление и положение камеры, характеристики экрана, программная пауза игры и др. Некоторая информация о различиях между ТЧ и ЗП в системе оконных классов и колбеков. (lekzd) Неплохо бы развить эту тему! Некоторая полезная информация о скриптовых функциях из модуля _g.script. (lekzd) Также требует развития! Полезные функции для работы с графом игры (Garry_Galler) В одном посте: Класс profile_timer Отладочные измерения скорости работы фрагментов программы Класс client_spawn_manager Колбек на выход в онлайн без использования биндера. Работа с консолью. Класс CConsole Анимации цвета. Класс color_animator Всякие моргающие элементы в окнах и пр. Управление постэффектами. Скриптовые постэффекты. Класс effector Класс sound_object. Проигрывание звуков в игре в произвольном месте, от произвольного объекта, в голове актора. (Shadows) Пост удалён автором (прим. Kirgudu) Скрытый текст Оконные классы Некоторая общая информация о создании окон Список методов, XML-тегов и событий для оконных классов (ТЧ/ЧН/ЗП) (Norman Eisenherz) Представление материала в моих статьях оптимизировано для онлайнового просмотра. Если кому не хочется лазить по спойлерам, а нужно просмотреть текст какого-либо поста "потоком", то могу рекомендовать просмотр в режиме "текстовая версия". В этом же режиме удобно сохранять содержимое темы на диск. (прим. Malandrinus) Изменено 30 Июля пользователем Kirgudu 5 5 16 Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Malandrinus 615 Опубликовано 18 Января 2011 Автор Поделиться Опубликовано 18 Января 2011 IQDDD, Как работает level.vertex_in_direction? Конкретно алгоритм действия движка. а луну с неба? Нужен алгоритм - дизассемблер в руки и вперёд =) Что непонятно то с этой функцией? Выдаёт вертекс под точкой. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
IQDDD 5 Опубликовано 19 Января 2011 Поделиться Опубликовано 19 Января 2011 Можно представить любую локацию как карту с графом, где вершины - level vertex'ы. С исходным вертексом и направлением более-менее понятно. А вот с третьим параметром не очень. Возможно, что движок тупо отсчитывает от данного в вертекса в таком-то направлении такое-то расстояние и выбирает ближайший к получившейся точке level vertex. Тогда вызов level.vertex_in_direction(lv,dir,dis) в модуле level эквивалентен: function vertex_in_direction(lv,dir,dis) local pos=vertex_position(lv) dir=dir:normalize() pos:add(dir*dis) return position_to_vertex(pos) -- где position_to_vertex(pos) возвращает ближайший к точке pos level vertex. end Я прав? Ссылка на комментарий
Malandrinus 615 Опубликовано 19 Января 2011 Автор Поделиться Опубликовано 19 Января 2011 IQDDD, Возможно, что движок тупо отсчитывает от данного в вертекса в таком-то направлении такое-то расстояние и выбирает ближайший к получившейся точке level vertex. Так и есть. Я подробно алгоритм поиска вертекса не исследовал, но вроде как координата Y (вертикальная) игнорируется. Кроме того, если под точкой сетки нет, то всё равно возвращается какой-то вертекс, ближайший или нет - не знаю. В ЗП, кстати, есть функция, которая просто возвращает вертекс по координатам без всей этой возни со стартовым вертексом, направлением и расстоянием. Хотя знак равенства между этими функциями я бы не ставил. Если думать о том, как этот алгоритм может быть реализован, то можно прийти в выводу, что функция эта весьма затратная, поскольку вертексов может быть под миллион и больше. vertex_in_direction возможно ищёт от текущего и на этом экономит, а как работает та функция из ЗП - могу только догадываться. И ещё. Граф уровня - это никакой не граф. Сетка уровня - это попросту невидимая поверхность, состоящая из мелких строго прямоугольных клеточек одинакового размера, натянутая на геометрию. Если актор и физические объекты взаимодействуют с реальной геометрией, то неписи ходят вот по этой невидимой поверхности. Это просто кажется, что они ходят по реальной геометрии. Процесс компиляции сетки собственно и заключается в том, чтобы создать такую поверхность, совмещённую с реальной геометрией. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Kolmogor 5 Опубликовано 19 Января 2011 Поделиться Опубликовано 19 Января 2011 В ЗП, кстати, есть функция, которая просто возвращает вертекс по координатам Если думать о том, как этот алгоритм может быть реализован, то можно прийти в выводу, что функция эта весьма затратная, поскольку вертексов может быть под миллион и больше. vertex_in_direction возможно ищёт от текущего и на этом экономит, а как работает та функция из ЗП - могу только догадываться. Сложность можно оценить по бардаковским исходникам - в сталкере думаю точно такая же функция используется. Например, функция xr_level_ai::vertex_id в xr_level_ai.cxx. Левел-вертекс ищется двоичным поиском - поэтому на миллионе вертексов итераций будет максимум 20 Причем в самих итерациях только сравнение и все. Так что функция получается быстрая - собственно такой формат аи-сетки для этого и делали Ссылка на комментарий
Byurrer 0 Опубликовано 19 Января 2011 Поделиться Опубликовано 19 Января 2011 Здравствуйте! Возникли небольшие идеи переделки ПДА, но само построение его я не смог найти в скриптах, подскажите пожалуйста кто знает в каком скрипте можно отредактировать ПДА, если есть такой ... Возможно глупый вопрос, возможно я тупанул но интересует очень ... Ссылка на комментарий
TRAMP14 1 Опубликовано 19 Января 2011 Поделиться Опубликовано 19 Января 2011 Byurrer походу скриптов ПДА нет, я всё перерыл, не одного упоминания можеш подредактировать XMLки в config=>ui=>все начинающиеся pda Ссылка на комментарий
Byurrer 0 Опубликовано 19 Января 2011 Поделиться Опубликовано 19 Января 2011 TRAMP14, да с xml то это понятно, но нужна сама начинка ПДА! Ссылка на комментарий
IQDDD 5 Опубликовано 19 Января 2011 Поделиться Опубликовано 19 Января 2011 Так что функция получается быстрая - собственно такой формат аи-сетки для этого и делали smile.gif А какой это "такой формат аи-сетки"? И что значит двоичный поиск? Если думать о том, как этот алгоритм может быть реализован, то можно прийти в выводу, что функция эта весьма затратная, поскольку вертексов может быть под миллион и больше. По идее, если номера вертексов более-менее связаны между собой, то возможно используются генетические алгоритмы. Ссылка на комментарий
TRAMP14 1 Опубликовано 19 Января 2011 Поделиться Опубликовано 19 Января 2011 TRAMP14, да с xml то это понятно, но нужна сама начинка ПДА! Вскрывай движок и редай. Я перерыл все скрипты и конфиги - упоминания нет (искал в отдельности - рамку, контакты и тп). Следовательно всё это добро выводит движок. Или есть вариант что у меня не Сталкер ТЧ а Контр-Страйк Ссылка на комментарий
Malandrinus 615 Опубликовано 19 Января 2011 Автор Поделиться Опубликовано 19 Января 2011 Kolmogor, Левел-вертекс ищется двоичным поиском - поэтому на миллионе вертексов итераций будет максимум 20 Причем в самих итерациях только сравнение и все. Так что функция получается быстрая - собственно такой формат аи-сетки для этого и делали Ну может быть. Типа заранее отсортировать по X, затем по Z, затем по Y. Но тогда должен возникать побочный эффект. Если не нашли узел точно, то будет найден не ближайший, а первый в ряду, т.е. скорее всего ближайший по X (или может Z), находящийся с краю локации. Надо будет при случае проверить. IQDDD, А какой это "такой формат аи-сетки"? Там просто линейный массив из всех узлов. Каждый узел представляет собой два целых числа - это так хранятся координаты в упакованном виде. Смысл в том, что вся сетка вписана в прямоугольный параллелепипед (бокс по-простому). На высоту даётся 2 байта, т.е. по высоте имеется ровно 65536 уровней, соответственно, разрешение сетки по высоте определяется как <высота бокса> / 65536. По X и Z задаётся примерно постоянный шаг (что-то около 0.25 игровых метра, хотя вроде это можно менять). Соответственно, может быть Nx = <сторона по X> / 0.25 и Nz = <сторона по Z> / 0.25 возможных координат по каждой оси, а всего Nx * Nz, но не больше, чем влазит в 24 разряда. Теперь обе координаты X и Z пакуются в одно целое в 24 бита. Дальше все эти элементы - упакованная Y и XZ, дополнительная информация по укрытиям и привязке к узлам графа - всё сохраняется в виде линейного массива в файлах. По всей видимости ещё и отсортировано заранее. И что значит двоичный поиск? Двоичный поиск Byurrer, да с xml то это понятно, но нужна сама начинка ПДА! Всё это внутри движка. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
_Призрак_ 11 Опубликовано 19 Января 2011 Поделиться Опубликовано 19 Января 2011 (изменено) Byurrer Обязательно ковырять движок. Для не сложным модификаций можно создавать кнопки, картинки и т.д. в пда через скрипты Раз уж отписался, то не знаете, есть ли функция закрытия/открытия инвенторя(пда)? Изменено 19 Января 2011 пользователем _Призрак_ Freedom Ссылка на комментарий
AKKK1 6 Опубликовано 19 Января 2011 Поделиться Опубликовано 19 Января 2011 Kolmogor, malandrinus Извените за оф топ но Возможно-ли чисто теоритически построение 3D АИ-сетки? Базовые ноды на земле имеют соединение (утрирую) вперед, назад, лево, право, верх. Второй уровень вперед, назад, лево, право, верх, низ . 3 уровень вперед, назад, лево, право, верх, низ и.т.д. получается один столбик но таких столбиков может быть столькоже сколько и нодов на земле (террейне) Впринципе можно добавить соединение по диоганали с соседних уровней сетки. Справятся с таким средние по современным меркам PC? Еще раз извеняюсь за оф топ. Ссылка на комментарий
Malandrinus 615 Опубликовано 19 Января 2011 Автор Поделиться Опубликовано 19 Января 2011 (изменено) _Призрак_, есть ли функция закрытия/открытия инвенторя(пда)? вроде нет. AKKK1, Возможно-ли чисто теоритически построение 3D АИ-сетки? Посчитай сам, сколько потребуется памяти на такую сетку. Да и зачем? Сетка нужна для "навигации" неписей по земле. Навигация в пространстве требует совершенно другого подхода. Изменено 19 Января 2011 пользователем kokkai Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
TRAMP14 1 Опубликовано 20 Января 2011 Поделиться Опубликовано 20 Января 2011 Хотел спросить - а шкала здоровья и брони тоже выводится движком? Ссылка на комментарий
Garry_Galler 7 Опубликовано 20 Января 2011 Поделиться Опубликовано 20 Января 2011 (изменено) есть ли функция закрытия/открытия инвенторя(пда)? Вот так я закрывал окно торговли --// поставить вызов OnTrade(info_id) в начало функции actor_binder:info_callback(npc, info_id) - файл bind_stalker.script local UITradeWnd function OnTrade(info_id) if info_id =="ui_trade" then UITradeWnd = level.main_input_receiver() elseif info_id == "ui_trade_hide" then UITradeWnd = nil end end --// вызов функции закрывает окно торговли - можно ставить куда угодно -хоть на апдейт function HideTradeWnd() if UITradeWnd then UITradeWnd:GetHolder():start_stop_menu(UITradeWnd, true) end end Если вместо инфопоршней на открытие\закрытие окна торговли указать инфопоршни на открытие\закрытие пда -"ui_pda" и "ui_pda_hide - или окна инвентаря - ui_inventory\ui_inventory_hide - будет тоже самое. TRAMP14 Движком - но вполне поддается редактированию в конфиге. Например можно сделать, чтобы шкала заполнялась\убывала не горизонтально, а вертикально, размеры поменять, координаты, и т.д . Вот с цветом вроде никак. Изменено 20 Января 2011 пользователем Garry_Galler Ссылка на комментарий
Stalk15 27 Опубликовано 22 Января 2011 Поделиться Опубликовано 22 Января 2011 Ни кто не в курсе, рабочий ли метод move_to(const vector&, const vector&) из класса партиклов? Я попробовал его применить: Particle:move_to(vector():set(-210,-20,-142), vector():set(-244,-24,-133)) Particle - это обьект партикла. Партикл проигрывается, но ни куда не движется. Ссылка на комментарий
Malandrinus 615 Опубликовано 22 Января 2011 Автор Поделиться Опубликовано 22 Января 2011 Stalk15, да, там какие-то проблемы. Причём, у меня дежа-вю, что как-то работало, но все поздние попытки были неудачными. В итоге, чтобы сместить партикл я просто создавал объект в новом месте, а старый удалял. Но он при этом некрасиво моргает. Если кто сможет выяснить условия работы этого метода - обязательно отпишитесь здесь. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Полтергейст 37 Опубликовано 22 Января 2011 Поделиться Опубликовано 22 Января 2011 У меня такой вопросик: Как функция can_switch_online() работает для смартов? Проверяет наличие NPC из смарта в онлайне или вызывает для них такую же функцию? Или как-то ещё? Ссылка на комментарий
Malandrinus 615 Опубликовано 23 Января 2011 Автор Поделиться Опубликовано 23 Января 2011 Функции can_switch_online/offline по идее определяют возможность перехода в онлайн/оффлайн самого объекта. Как это будет в данном случае влиять на неписей, приписанных к смарту, понятия не имею. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
TRAMP14 1 Опубликовано 30 Января 2011 Поделиться Опубликовано 30 Января 2011 Хотел спросить по поводу сей строчки - sell_condition(float, float) float, float это переменные? или что? Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти