Это популярное сообщение. 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 Опубликовано 11 Декабря 2011 Автор Поделиться Опубликовано 11 Декабря 2011 AndreySol, класс Frect - 6 переменных, ф-ция set инициализирует только 4. Какие из них ? Зачем две остальных. Как это использовать ? инициализируются соответственно x1,x2,y1,y2 lt - это left top, координаты левой верхней вершины rb - right bottom, координаты правой нижней вершины это объекты класса vector2, который экспортирован только начиная с ЧН. Поэтому в ТЧ попытка получить эти свойства приведёт к вылету. В их использовании особой необходимости по-любому нет. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
SkyLoader 53 Опубликовано 11 Декабря 2011 Поделиться Опубликовано 11 Декабря 2011 (изменено) malandrinus, пост #102: function TestPP:finilize() end исправил ЗЫ: надо же, кто-то даже это читает Изменено 11 Декабря 2011 пользователем malandrinus Ссылка на комментарий
Zander_driver 10 333 Опубликовано 12 Декабря 2011 Поделиться Опубликовано 12 Декабря 2011 Читают очень-очень многое... А вот то о чем я писал тут, так и не исправили. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Malandrinus 615 Опубликовано 12 Декабря 2011 Автор Поделиться Опубликовано 12 Декабря 2011 Да там давно надо весь пост про game_object переписывать. У меня накопилось много исправлений и дополнений, но всё руки не доходят это дело оформить. В первую очередь надо оформить пост с истинной иерархией классов, как серверных так и клиентских. Затем полную таблицу сетов (зарегистрированных в движке пар), затем только новый пост про game_object, где все функции рассортированы по этим классам. Найти бы время для всего этого. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
KD87 718 Опубликовано 12 Декабря 2011 Поделиться Опубликовано 12 Декабря 2011 malandrinus, по game_object я подобное начал делать. Пока рассортировал методы по классам, около трети методов описал и проверил в игре. Могу выслать в качестве затравки, чтобы с нуля не пришлось начинать. Ссылка на комментарий
Malandrinus 615 Опубликовано 13 Декабря 2011 Автор Поделиться Опубликовано 13 Декабря 2011 KD87, по game_object я подобное начал делать. Пока рассортировал методы по классам, около трети методов описал и проверил в игре. Могу выслать в качестве затравки, чтобы с нуля не пришлось начинать. Буду весьма признателен за любую помощь. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
AndreySol 215 Опубликовано 16 Декабря 2011 Поделиться Опубликовано 16 Декабря 2011 Вопрос по содержимому нет-пакетов для различных игровых объектов: оружия, брони, пачек патронов, аномалий, неписей, аптечек, хлеба и др. и др. - параметры нет-пакетов разнятся для всех этих объектов ? Есть-ли где-то список этих параметров ? Я вот нашел на stalkerin.gameru.net ф-цию перепаковки неполных пачек патронов, в ней главный момент: function get_ammo_size(obj) local se_obj = alife():object(obj:id()) local packet = net_packet() cse_alife_item_ammo.STATE_Write(se_obj, packet) packet:r_seek(packet:w_tell() - 2) return packet:r_u16() end понятно, что по смещению packet:w_tell() - 2 находится кол-во патронов в пачке, значит есть описание этих параметров нет-пакетов ? Ссылка на комментарий
KD87 718 Опубликовано 16 Декабря 2011 Поделиться Опубликовано 16 Декабря 2011 AndreySol, например - в acdc. В нем каждый package соответствует серверному классу. Логику чтения нет-пакета (порядок и формат параметров) смотри в методах state_read/update_read. Еще вариант - функции перепаковки нет-пакета из АМК мода, но там ограниченный набор классов. Ссылка на комментарий
AndreySol 215 Опубликовано 17 Декабря 2011 Поделиться Опубликовано 17 Декабря 2011 В описании класса CUIStatic: void SetColor(DWORD color); // фон DWORD GetColor() const; эти методы класса рабочие ? такой код не дает эффекта: local color = GetARGB(255,255,255,255) st_item:SetColor(color) Ссылка на комментарий
Malandrinus 615 Опубликовано 17 Декабря 2011 Автор Поделиться Опубликовано 17 Декабря 2011 AndreySol, такой код не дает эффекта: local color = GetARGB(255,255,255,255) st_item:SetColor(color) прозрачность 100% задал, конечно не работает Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
AndreySol 215 Опубликовано 17 Декабря 2011 Поделиться Опубликовано 17 Декабря 2011 local color = GetARGB(0,255,255,255) st_item:SetColor(color) так то-же нет толку. Ссылка на комментарий
Полтергейст 37 Опубликовано 23 Декабря 2011 Поделиться Опубликовано 23 Декабря 2011 По поводу коллбеков: 1. Коллбеки типа callback.sound перехватывают звуки только от сталкеров, монстров, игрока и детекторов. 2. Есть кое-какие предположения насчет коллбеков action_animation, action_movement, action_object, action_particle, action_sound и action_watch. Если посмотреть в lua_help на описание функций set_action() из класса entity_action, то становится понятно, что они нужны для отслеживания действий монстров. Для остальных объектов они, скорее всего, работать не будут. Вот только нет примеров использования. Ссылка на комментарий
Полтергейст 37 Опубликовано 27 Декабря 2011 Поделиться Опубликовано 27 Декабря 2011 Есть одна очень хорошая новость. Судя по тому, что я накопал, в lua_help добавлены не все экспортируемые функции и классы. Например, функция CALifeMonsterBrain.can_choose_alife_tasks(bool) экспортирована в скрипты не только в ЧН и ЗП, но и в ТЧ. Только что проверил - никаких вылетов при вызове этой функции нет. Вполне возможно, что есть и другие функции, которые можно использовать, но они не описаны в lua_help. Ссылка на комментарий
Andrey07071977 18 Опубликовано 28 Декабря 2011 Поделиться Опубликовано 28 Декабря 2011 (изменено) Полтергейст, интересная находка, выкладывай что накопаешь. Если можно несколько примеров - как тестировал, использовал. Изменено 28 Декабря 2011 пользователем Andrey07071977 Ссылка на комментарий
*Shoker* 322 Опубликовано 30 Декабря 2011 Поделиться Опубликовано 30 Декабря 2011 (изменено) > Судя по тому, что я накопал, в lua_help добавлены не все экспортируемые функции и классы А существует ли возможность определить, глядя на dll, какая функция была импортирована? Мне вообще казалось lua_help генерируется автоматом, а не вручную забивается. Изменено 1 Января 2012 пользователем ColR_iT Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Полтергейст 37 Опубликовано 30 Декабря 2011 Поделиться Опубликовано 30 Декабря 2011 А существует ли возможность определить, глядя на dll, какая функция была импортирована? Обычно функции, которые выведены в скрипты, перечисляются в dll-ке открытым текстом примерно через одинаковое расстояние (по символам). Примерно так эта функция и была обнаружена - в dll её имя прописано рядом с именами других функций этого класса. Также имена некоторых функций и классов (в т.ч. и неэкспортированных) можно найти в сообщениях, предназначенных для вывода в лог при ошибке. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 7 Января 2012 Поделиться Опубликовано 7 Января 2012 Наверное сюда вопрос: правильно ли я понимаю, что npc:critically_wounded() возращает не false/nil примерно на время, когда проигрывается анимация ранения ? Что она вообще такое на самом деле ? а npc:wounded() - это когда хиты непися ушли за некое пороговое значение (и кстати вот здесь примерно он должен лечь совсем ?) Как оно связано с конфигами ? 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
abramcumner 1 148 Опубликовано 7 Января 2012 Поделиться Опубликовано 7 Января 2012 правильно ли я понимаю, что npc:critically_wounded() возращает не false/nil примерно на время, когда проигрывается анимация ранения ? Что она вообще такое на самом деле ? Да, true выдается во время проигрывания анимации ранения, остальное время false Зависит от значений конфига critical_wound_threshold и critical_wound_decrease_quant. Если critical_wound_threshold меньше 0, анимации не проигрываются. Для определения момента начала проигрыша анимации заводится счетчик. Он увеличивается при каждом хите на итоговый power хита, и каждую секунду уменьшается на critical_wound_decrease_quant. Когда значение счетчика больше или равно critical_wound_threshold, стартует анимация. Анимация проигрывается в зависимости от кости, в которую попали последний раз. а npc:wounded() - это когда хиты непися ушли за некое пороговое значение (и кстати вот здесь примерно он должен лечь совсем ?) Как оно связано с конфигами ? С конфигами никак не связано. Устанавливается исключительно из скриптов, в движке никак не задается, но используется. Пороговые значения задаются в xr_wounded.script 1 Ссылка на комментарий
Viнt@rь 50 Опубликовано 8 Января 2012 Поделиться Опубликовано 8 Января 2012 (изменено) всем известно, что в ТЧ была функция level.main_input_receiver(), а уже в ЧН/ЗП ее нет, где то видел писали, что AddToRender() выполняет такие же(ну или почти такие же) действия, что и level.main_input_receiver(), хотелось бы узнать правда ли это и как ее использовать? Изменено 8 Января 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий
_Призрак_ 11 Опубликовано 8 Января 2012 Поделиться Опубликовано 8 Января 2012 Не те же, на сколько я знаю. При помощи AddToRender() можно присобачить элемент на экран, но есть 2 но 1. Элемент будет всегда под худом/инвентарем/пда 2. Элемент не может взаимодействовать с ГГ (кнопки/табы/списки таким образом сразу исключаются) Получается что все что возможно - это статик приаттачить к экрану Freedom Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти