Это популярное сообщение. 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 Ссылка на комментарий
naxac 2 444 Опубликовано 29 Августа 2015 Поделиться Опубликовано 29 Августа 2015 @Graff46, задаём. От 0 до 1. 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Graff46 598 Опубликовано 23 Ноября 2015 Поделиться Опубликовано 23 Ноября 2015 (изменено) Когда пользуюсь getFS():update_path("$game_textures$", "trees\\elka.dds") то путь обрывается при первом пробеле в строке пути. Например у меня такой путь будет C:\Program Files (x86)\S.T.A.L.K.E.R. Тени Чернобыля\gamedata\textures\trees\elka.dds но отображается только так C:\Program Изменено 23 Ноября 2015 пользователем Graff46 Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 23 Ноября 2015 Поделиться Опубликовано 23 Ноября 2015 (изменено) Винда, однако. Кроме того, а оно вообще разве позволяет гулять за пределы FS root ? Изменено 23 Ноября 2015 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Graff46 598 Опубликовано 23 Ноября 2015 Поделиться Опубликовано 23 Ноября 2015 Винда, однако. Кроме того, а оно вообще разве позволяет гулять за пределы FS root ? Все норм работает! это я тупил, проверял путь впихивая его в консоль get_console():execute("путь") А консоль с пустыми пробелами не очень дружит. Насчет FS root, как то давно мне нужно было получить доступ к файлам через игру, на форумах мне говорили, что это не возможно, пока я сам не поюзал FS root, через него можно залезть в принципе к любому файлу на ОСи. Я на основе этого делаю смену времен года в игре. Ссылка на комментарий
НаноБот 735 Опубликовано 2 Декабря 2015 Поделиться Опубликовано 2 Декабря 2015 (изменено) Кстати, заметил не которые проблемы: метод bone_position() - для не которых монстров работает не правильно, в точности для бюрера когда пытается "колдовать", то есть кидаться предметами. Метод alive() так же иногда выдаёт false для живого объекта, замечено у зомби и ворон, по этому можно проверять наличие физ. оболочки, если метод get_physics_shell возвращает nil то объект точно живой. Изменено 2 Декабря 2015 пользователем НаноБот 1 2 ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
Карлан 1 049 Опубликовано 2 Декабря 2015 Поделиться Опубликовано 2 Декабря 2015 @НаноБот, некоторые люди не отключают физ. оболочку у трупов. Ссылка на комментарий
НаноБот 735 Опубликовано 2 Декабря 2015 Поделиться Опубликовано 2 Декабря 2015 @Карлан, то есть при смерти живого объекта физ. оболочка не включается? А как дальше, анимация смерти как в старых движках, типа как в старой контры. ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
RayTwitty 492 Опубликовано 18 Декабря 2015 Поделиться Опубликовано 18 Декабря 2015 (изменено) void iterate_inventory(function* iterator, game_object* obj) -- перебрать предметы, принадлежащие NPC Небольшое уточнение - второй аргумент необязательно должен быть каким-то игровым объектом, с помощью него можно передавать любые параметры - строки, таблицы и т.д. bool marked_dropped(game_object*); void mark_item_dropped(game_object*); Не знаю, разбирал ли кто-то эти методы, но: mark_item_dropped(item) - устанавливает пометку на выкидывание предмета из инвентаря. По сути, это отложенное выкидывание (при drop_item, предмет выкидывается сразу). Дроп происходит на апдейте того объекта (shedule_Update), в котором находится предмет. Метод вызывается для CActor, CAI_Stalker, CAI_Trader.. bool marked_dropped(item) - показывает, установлена ли метка на дроп. Необходимость в отложенном дропе вызвана ситуацией, когда предметом манипулируют сразу несколько схем. Кстати, на удаление тоже не помешало бы сделать такую метку. Изменено 22 Декабря 2015 пользователем Malandrinus Добавлено Malandrinus, 22 Декабря 2015 Пост дополнил информацией из позднего обсуждения. Также по этой теме есть ссылки на посты, предоставленные пользователем Struck: http://www.amk-team.ru/forum/index.php?showtopic=6185&p=797259 http://www.amk-team.ru/forum/index.php?showtopic=7450&p=690620 http://www.amk-team.ru/forum/index.php?showtopic=6185&p=595142 Весь гнусный оффтоп на тему кто есть непись, а кто нет вычистил. 1 1 Ссылка на комментарий
FonSwong 33 Опубликовано 14 Января 2016 Поделиться Опубликовано 14 Января 2016 (изменено) Нашёл ответ на свой вопрос: как изменить и узнать ПЕРСОНАЛЬНОЕ отношение НПС к ГГ, даже если вы ещё не встречались и он, НПС, на другой локации: Ковыряюсь я на ТЧ в моде OGSE, т.к. там изменённый движок, добавили функции: relation_registry function relation_registry.get_goodwill(who_id, to_whom_id) return GetGoodwill(who_id, to_whom_id) end function relation_registry.set_goodwill(who_id, to_whom_id, goodwill) ASSERT(db.actor, "relation_registry.set_goodwill: cannot call function") return db.actor:set_goodwill_ex(who_id, to_whom_id, goodwill) end function relation_registry.change_goodwill(who_id, to_whom_id, goodwill_change) ASSERT(db.actor, "relation_registry.change_goodwill: cannot call function") return db.actor:change_goodwill_ex(who_id, to_whom_id, goodwill_change) end С помощью них можно изменять и получать ПЕРСОНАЛЬНУЮ репутацию, даже если НПС на другой локации: relation_registry.get_goodwill(3131, 0) --получить персональную репутацию от Толика к ГГ relation_registry.set_goodwill(3131, 0, 1000) или relation_registry.set_goodwill(3131, 0, -1000) --установить персональную репутацию от Толика к ГГ relation_registry.change_goodwill(3131, 0, -1000) или relation_registry.change_goodwill(3131, 0, 1000) --изменить персональную репутацию от Толика к ГГ(отнять или прибавить к текущей) Стоит помнить, что кроме персональной репутации, существует общая формула,где значения складываются, для вычисления враг/нейтрал/друг(файл game_relations.ltx): ; отношение персонажа к актеру (или другому NPC) вычисляется по формуле ; attitude = personal_goodwill + //личное отношение персонажа к актеру (если раньше не встречались, то 0) ; community_goodwill + //отношение группировки персонажа лично к актеру (если раньше контактов не было, то 0) ; community_to_community + //отношение группировки персонажа к группировке актера из [communities_relations] ; reputation_goodwill + //отношение репутации персонажа к репутации актера из [reputation_relations] ; rank_goodwill //отношение ранга персонажа к рангу актера из [rank_relations] Изменено 14 Января 2016 пользователем FonSwong Ссылка на комментарий
dsh 3 824 Опубликовано 14 Января 2016 Поделиться Опубликовано 14 Января 2016 @FonSwong, к выше написанному я бы добавил, что к OGSE это имеет опосредованное отношение. Те возможности, которые ты описал, добавлены в x-ray extensions. 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Graff46 598 Опубликовано 6 Февраля 2016 Поделиться Опубликовано 6 Февраля 2016 Не нашёл описание полезного класса reader, может кто то поделится знаниями со всеми? Ссылка на комментарий
Desertir 202 Опубликовано 6 Февраля 2016 Поделиться Опубликовано 6 Февраля 2016 @Graff46, пять лет назад говорили, что reader похож на net_packet. Может что то изменилось? ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
UnLoaded 313 Опубликовано 3 Апреля 2016 Поделиться Опубликовано 3 Апреля 2016 Ссылка на описание класса sound_object в шапке темы дохлая. Не плохо-бы восстановить... 1 Ссылка на комментарий
Fagot. 400 Опубликовано 26 Апреля 2016 Поделиться Опубликовано 26 Апреля 2016 Всем привет! Как узнать (функция?), что на поясе у ГГ появился определённый артефакт? У самого что-то мозгов не хватает... Почитал "шапку" темы, ответ не нашёл. П.С.: Не знаю, где лучше задать вопрос, здесь или в "Ковырянии". С.Т.А.Л.К.Е.Р. - Равновесие-2 Проект виртуальной реконструкции г.Припять. Ссылка на комментарий
Malandrinus 615 Опубликовано 26 Апреля 2016 Автор Поделиться Опубликовано 26 Апреля 2016 @Fagot., на чистом движке это проблематично. С правками можно. Там есть функция для получения предмета с пояса и также колбек на появление предмета на поясе. 1 Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
НаноБот 735 Опубликовано 19 Июня 2016 Поделиться Опубликовано 19 Июня 2016 (изменено) void set_queue_size(int <queue_size>) – установить размер очереди при стрельбе из автоматического оружия Как этот метод можно использовать? Можно использовать в скриптовом оружие, в точности wpn:set_queue_size(0) блокирует огонь, а wpn:set_queue_size(1(или -1 для автооружия)) разблокирует. Работает для всех классов, с ножом не проверял. Используется М139 с блоком вращающих стволов, в моём ПЗРК, много где можно использовать, где надо заблокировать огонь. Изменено 19 Июня 2016 пользователем НаноБот ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
IQDDD 5 Опубликовано 10 Июля 2016 Поделиться Опубликовано 10 Июля 2016 Как определить, к какому серверному классу принадлежит серверный объект? Ссылка на комментарий
naxac 2 444 Опубликовано 10 Июля 2016 Поделиться Опубликовано 10 Июля 2016 Через clsid. 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Карлан 1 049 Опубликовано 23 Июля 2016 Поделиться Опубликовано 23 Июля 2016 Сейчас анализирую и перерабатываю формулы учета защиты броников, и дошел до damages.ltx наконец. Формат: bone = p1,p2,p3 bone - костьp1 - коэффициент на который умножается расчет хита (протекция умножается на кондицию) при нанесении хита по этой кости, итоговый коэффициент которых учавствует в общей формуле формирования хита, то есть вроде как крепость костиp2 - защита самой кости, умножается на кондицию броника, то есть вроде как защита броникаp3 - пуля на вылет, в целом все равно какой коэффициент, важно само наличие коэффициента, на самом деле он должен быть 0/1, то есть true/false Парадокс в том, что в оригинале даже куртка новичка непробиваема (исходя из каких-то более интересных формул расчета защиты), и когда я написал более менее вменяемые формулы расчетов для монстров и сталкеров - в игре стали одни терминаторы.Поэтому надо оформлять как-то так (пример для левой руки в куртке): bip01_l_hand = 1.0, 0.05, 1 Первый всегда единица очевидно потому, что хватает одной настройки протекции, и первый параметр в damages вообще не надо трогать, всегда ставьте единицу, меньше будет возни с перестройкой конфигов. Второй чрезвычайно важен, он может сделать непися в лохмотьях неубиваемым, за ним категорически советую следить! Третий - по желанию, но лучше в движке переделать на рандом при 1, иначе бить в эту кость будет бесполезно(!). Иначе говоря вторым параметром рекомендуется связать бронебойность патрона и защиту броников, получается достаточно качественная связка. Еще можно переделать учеты и других параметров патронов, а то они совершенно как-то напрасно добавлены. Но на это нужен конфигер-тестер, который будет перелопачивать все броники, демеджи и патроны. А написать качественные формулы защиты не так сложно. 3 1 Ссылка на комментарий
Карлан 1 049 Опубликовано 31 Июля 2016 Поделиться Опубликовано 31 Июля 2016 Не помогает даже Как-раз помогает. Чтобы не быть голословным - я включил этот коллбек две недели назад и на протяжении этого времени, как могу, тестирую игру. Монстры со всем своим скарбом сохраняются замечательно. Укажу, что в пакеты писать ничего не пробовал, изначально пишу в память, но сам факт работы коллбеков на лицо, и да, в движке я ничего специально не делал. Сохраняю их как и остальные объекты всем полным циклом, у меня функции наподобие save_obj/load_obj. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти