Это популярное сообщение. 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. Проигрывание звуков в игре в произвольном месте, от произвольного объекта, в голове актора. Скрытый текст Оконные классы Некоторая общая информация о создании окон Список методов, XML-тегов и событий для оконных классов (ТЧ/ЧН/ЗП) (Norman Eisenherz) Представление материала в моих статьях оптимизировано для онлайнового просмотра. Если кому не хочется лазить по спойлерам, а нужно просмотреть текст какого-либо поста "потоком", то могу рекомендовать просмотр в режиме "текстовая версия". В этом же режиме удобно сохранять содержимое темы на диск. (прим. Malandrinus) Изменено 17 Февраля пользователем Опричник 5 5 16 Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/
Это популярное сообщение. WinCap 323 Опубликовано 18 Сентября 2017 Это популярное сообщение. Поделиться Опубликовано 18 Сентября 2017 Не нашёл на форуме какой-то обобщённой информации по этому вопросу и вот: Выбор оружия NPC по типу и дистанции. Платформа CoP 1.6.0.2 Имея в своём арсенале более одного типа оружия, NPC решает, какое из них использовать, основываясь на следующих факторах: - тип своего оружия - тип оружия врага - дистанция до врага Тип оружия определяется параметром ef_weapon_type, заданным в его конфигах. Это число от 1 до 12 и одинаково как для своего оружия, так и для вражеского. Дистанция до врага определяется абсолютной величиной и приводится движком к трём значениям: 1 - ближе 3 м 2 - от 3 до 20 м 3 - более 20 м Таким образом, для выбора оружия определяются три переменные, условно назовём их: SELF_WPN_TYPE 1 .. 12 ENEMY_WPN_TYPE 1 .. 12 DIST_TO_ENEMY 1 .. 3 По этим трём переменным из таблицы, хранящейся в файле ai\common\WeaponEffectiveness.efd, считывается значение, назовём его RATIO, по которому и определяется какое оружие из имеющегося у NPC нужно сейчас использовать. Если значение RATIO одинаково для нескольких типов имеющегося оружия, то используется самое дорогое из них с учётом обвесов и снаряженных патронов. Пример: Скрытый текст NPC имеет в арсенале Обрез и ПМм и находится на расстоянии 15м от врага вооружённого ПМм, в этом случае переменные будут иметь следующие значения: Для Обреза: SELF_WPN_TYPE = 9 ENEMY_WPN_TYPE = 5 DIST_TO_ENEMY = 2 Для ПМм: SELF_WPN_TYPE = 5 ENEMY_WPN_TYPE = 5 DIST_TO_ENEMY = 2 Из таблицы WeaponEffectiveness RATIO будет равен: SELF ENEMY DIST WPN WPN TO RATIO TYPE TYPE ENEMY 5 5 1 30 5 5 2 35 5 5 3 30 . . . 9 5 1 90 9 5 2 65 9 5 3 30 Полный вариант Для Обреза: RATIO = 65 Для ПМм: RATIO = 35 Поскольку RATIO для Обреза больше чем для ПМм NPC выберет Обрез. Теперь допустим, что расстояние до врага увеличилось до 25м, тогда: DIST_TO_ENEMY = 3 По таблице определяется: Для Обреза: RATIO = 30 Для ПМм: RATIO = 30 Поскольку значения RATIO равны NPC выберет ПМм, поскольку он дороже, чем Обрез. 2 3 Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1118709
AndreySol 215 Опубликовано 25 Октября 2017 Поделиться Опубликовано 25 Октября 2017 @WinCap Спрошу, однако: информация откуда ? Тесты, курение исходников, еще что-то ? Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1129023
WinCap 323 Опубликовано 25 Октября 2017 Поделиться Опубликовано 25 Октября 2017 @AndreySol Ну, не курение конечно... Но без пузыря там точно не разобраться. Информация из исходников. Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1129100
Dennis_Chikin 3 665 Опубликовано 5 Февраля 2018 Поделиться Опубликовано 5 Февраля 2018 Наверное, сюда: function my_func() ... level.set_weather_fx( ... ) -- висим, и через некоторое время вылет без лога либо CCustomMotion::Length() ... end level.add_call( my_func, another_func ) Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1152622
abramcumner 1 229 Опубликовано 5 Февраля 2018 Поделиться Опубликовано 5 Февраля 2018 @Dennis_Chikin, то есть ты каждый апдейт запускаешь level.set_weather_fx? Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1152638
Dennis_Chikin 3 665 Опубликовано 5 Февраля 2018 Поделиться Опубликовано 5 Февраля 2018 Однократного вызова достаточно. Зачем он в апдейте - например, проверять, выполнено ли некое условие, и именно тогда - вызвать, в остальное время - делать что-то еще. Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1152640
Это популярное сообщение. Graff46 621 Опубликовано 27 Марта 2018 Это популярное сообщение. Поделиться Опубликовано 27 Марта 2018 Вроде как потерялся класс sound_object. Взял отсюда. Прошу битую ссылку в шапке на этот пост настроить. Описание класса из lua_help Скрытый текст C++ class sound_object { const looped = 1; // зацикленность звука const s2d = 2; // играть в голове актора const s3d = 0; // играть в пространстве property frequency; // частота property max_distance; // максимальная дистанция слышимости property min_distance; // минимальная дистанция слышимости property volume; // громкость sound_object (string); // создание звукового объекта, в аргументе - путь до звукового файла sound_object (string, enum ESoundTypes); // тоже самое, что и предыдущее + установка типа звука function set_position(const vector&); // установить позицию звука function stop_deffered(); // отложенная остановка function get_position() const; // получить позицию звука function stop(); // остановка function length(); // получить длительность звука function playing() const; // играет ли звук в данный момент function play_no_feedback(game_object*, number, number, vector, number); function play_at_pos(game_object*, const vector&); function play_at_pos(game_object*, const vector&, number); function play_at_pos(game_object*, const vector&, number, number); function play(game_object*); function play(game_object*, number); function play(game_object*, number, number); }; Описание ESoundTypes из движка игры Скрытый текст enum ESoundTypes { SOUND_TYPE_NO_SOUND = 0x0, SOUND_TYPE_WEAPON = 0x80000000, SOUND_TYPE_ITEM = 0x40000000, SOUND_TYPE_MONSTER = 0x20000000, SOUND_TYPE_ANOMALY = 0x10000000, SOUND_TYPE_WORLD = 0x8000000, SOUND_TYPE_PICKING_UP = 0x4000000, SOUND_TYPE_DROPPING = 0x2000000, SOUND_TYPE_HIDING = 0x1000000, SOUND_TYPE_TAKING = 0x800000, SOUND_TYPE_USING = 0x400000, SOUND_TYPE_SHOOTING = 0x200000, SOUND_TYPE_EMPTY_CLICKING = 0x100000, SOUND_TYPE_BULLET_HIT = 0x80000, SOUND_TYPE_RECHARGING = 0x40000, SOUND_TYPE_DYING = 0x20000, SOUND_TYPE_INJURING = 0x10000, SOUND_TYPE_STEP = 0x8000, SOUND_TYPE_TALKING = 0x4000, SOUND_TYPE_ATTACKING = 0x2000, SOUND_TYPE_EATING = 0x1000, SOUND_TYPE_IDLE = 0x800, SOUND_TYPE_OBJECT_BREAKING = 0x400, SOUND_TYPE_OBJECT_COLLIDING = 0x200, SOUND_TYPE_OBJECT_EXPLODING = 0x100, SOUND_TYPE_AMBIENT = 0x80, SOUND_TYPE_ITEM_PICKING_UP = 0x44000000, SOUND_TYPE_ITEM_DROPPING = 0x42000000, SOUND_TYPE_ITEM_HIDING = 0x41000000, SOUND_TYPE_ITEM_TAKING = 0x40800000, SOUND_TYPE_ITEM_USING = 0x40400000, SOUND_TYPE_WEAPON_SHOOTING = 0x80200000, SOUND_TYPE_WEAPON_EMPTY_CLICKING = 0x80100000, SOUND_TYPE_WEAPON_BULLET_HIT = 0x80080000, SOUND_TYPE_WEAPON_RECHARGING = 0x80040000, SOUND_TYPE_MONSTER_DYING = 0x20020000, SOUND_TYPE_MONSTER_INJURING = 0x20010000, SOUND_TYPE_MONSTER_STEP = 0x20008000, SOUND_TYPE_MONSTER_TALKING = 0x20004000, SOUND_TYPE_MONSTER_ATTACKING = 0x20002000, SOUND_TYPE_MONSTER_EATING = 0x20001000, SOUND_TYPE_ANOMALY_IDLE = 0x10000800, SOUND_TYPE_WORLD_OBJECT_BREAKING = 0x8000400, SOUND_TYPE_WORLD_OBJECT_COLLIDING = 0x8000200, SOUND_TYPE_WORLD_OBJECT_EXPLODING = 0x8000100, SOUND_TYPE_WORLD_AMBIENT = 0x8000080, SOUND_TYPE_WEAPON_PISTOL = 0x80000000, SOUND_TYPE_WEAPON_GUN = 0x80000000, SOUND_TYPE_WEAPON_SUBMACHINEGUN = 0x80000000, SOUND_TYPE_WEAPON_MACHINEGUN = 0x80000000, SOUND_TYPE_WEAPON_SNIPERRIFLE = 0x80000000, SOUND_TYPE_WEAPON_GRENADELAUNCHER = 0x80000000, SOUND_TYPE_WEAPON_ROCKETLAUNCHER = 0x80000000, }; Методы проигрывания звуков: Описание параметров:obj - игровой объектtimeout - задержка перед проигрыванием звукаposition - позицияvolume - громкостьflags - набор констант класса sound_object (looped, s2d, s3d) play Скрытый текст function play(obj); function play(obj, timeout); function play(obj, timeout, flags); методы с одним и двумя аргументами не работают; работает только для актора. Метод годится только для проигрывания звуков в голове актора. play_at_pos Скрытый текст function play_at_pos(obj, position); function play_at_pos(obj, position, timeout); function play_at_pos(obj, position, timeout, flags); для метода с двумя аргументами, второй аргумент - это позиция на уровне. Звук не перемещается вместе с объектом, а остается играть там, где запустили. Работает и для актора и для других объектов; метод с тремя аргументами работает как и предыдущий, но появилась возможность установки таймаута; особенности метода с четырьмя аргументами: для актора аргумент position - это смещение звука относительно актора. Звук смещается вместе с актором. Также, необходимо использовать флаг s2d (при s3d звука не будет); для других объектов аргумент position является позицией на уровне. В этом случае необходимо использовать флаг s3d. play_no_feedback Скрытый текст function play_no_feedback(obj, flags, timeout, position, volume); в случае проигрывания в голове актора - параметр position устанавливает смещение относительно актора; звук перемещается вместе с актором; необходимо использовать флаг s2d (при s3d звука не будет); в случае проигрывания в пространстве - параметр position устанавливает позицию проигрывания звука на уровне; необходимо использовать флаг s3d; если задано циклическое проигрывание звука, то оно не прекратится, даже если перезагрузить уровень; громкость задается в интервале от 0.0 до 1.0; поскольку метод без обратной связи, в процессе проигрывания звука нельзя изменить его громкость, позицию, а также оставить проигрывание. Данный метод подходит для проигрывания не цикличных звуков, для который не требуется дальнейшее изменение параметров. Внимание! При использовании методов play и play_at_pos необходимо сохранять созданный звуковой объект во внешнюю локальную переменную, иначе сборщик мусора затрет звук. 5 Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1162853
Winsor 178 Опубликовано 12 Апреля 2018 Поделиться Опубликовано 12 Апреля 2018 В 05.02.2018 в 02:01, Dennis_Chikin сказал: level.add_call( my_func, another_func ) level.add_call добавляет на каждом апдейте вызов Ваших функций, указанных как параметры таким образом первый параметр - это функция которая должна в обязательном порядке вернуть значение булевого типа. если функция вернула true - это условие для вызова функции во втором параметре. результат второй функции - не важен. так как данная проверка происходит на каждом OnFrame - для ускорения работы движок не проверяет валидность результата функции my_func вообще. Если функция возвращает , например, userdata, либо не возвращает ничего - будет вылет. По поводу однократного вызова - проверка my_func будет вызываться до тех пор пока не будет сделан level.remove-call( my_func, another_func ) - ну и само собой - если my_func вернула true на каждом вызове - то и постоянно будет вызываться another_func. Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1166110
Dennis_Chikin 3 665 Опубликовано 12 Апреля 2018 Поделиться Опубликовано 12 Апреля 2018 вот полный код: function update() local v = upd_t[upd_i] if v then local st = v.st if st.active_section then issue_event( v.object, st[st.active_scheme], "update", delta ) else upd_t[upd_i] = false -- удаляем из списка на апдейт end upd_i = upd_i + 1 elseif v == false then -- удаляем из списка на апдейт table_remove( idx_t, upd_i ) table_remove( upd_t, upd_i ) upd_n = upd_n - 1 else upd_end = true end return false end Если через issue_event() каким-то образом доходит до level.set_weather_fx( ... ) - вот на ней и виснем. Если это же самое вызывать не через level.add_call( update, dummy_action ), а, например, из апдейта актора, либо конкретно if условие then ... level.set_weather_fx( ... ) ... end вынести в тот же апдейт актора - все замечательно работает. То есть, делаем вывод, что все-таки связка level.add_call( ... ) + level.set_weather_fx( ... ). Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1166112
Graff46 621 Опубликовано 12 Апреля 2018 Поделиться Опубликовано 12 Апреля 2018 Хотелось бы узнать о таком применении функции: function add_call(object, const function<boolean>&, const function<void>&); function add_call(object, string, string); Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1166113
dsh 3 824 Опубликовано 12 Апреля 2018 Поделиться Опубликовано 12 Апреля 2018 @Graff46 тоже самое, только вызываются методы объекта. В первом случае они передаются ссылкой, во втором - названием. Насколько я помню, там, где это не исправлялись, они не рабочие, как и соотв. им remove_call. remove_call сам по себе не очень рабочий. Например, если его вызвать из функции, которая выполняется из add_call. Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1166119
Serge_888 114 Опубликовано 29 Октября 2018 Поделиться Опубликовано 29 Октября 2018 Здравствуйте, может здесь кто подскажет. Есть ли у оружия wpn_rg-6 (который гранатомёт Бульдог-6) свойство отвечающее за готовность к стрельбе? Или функция инициализации/ресета для приведения в нулёвое состояние? Кстати, заклинившие стволы тоже должны иметь похожее свойство. Проблемка - когда отключаю в конфиг-файле tri_state_reload = off и добавляю анимку anm_reload (без неё вылет), после выстреливания количества гранат указанного в ammo_mag_size, сколько ни перезаряжай, стрелять не хочет. Думаю, может скриптами это пофиксить можно? Пока, кроме как тупо забрать РГ-6 у актора и тут-же выдать новый ничего в голову не приходит. Кстати, заодно не подскажете как из скрипта запустить анимацию (например перезарядки) в ЗП, для рук и оружия? Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1207825
НаноБот 746 Опубликовано 29 Августа 2019 Поделиться Опубликовано 29 Августа 2019 (изменено) @Serge_888, на счёт РГ-6, это движковой правкой. В новой ревизии ХЕ это по фиксил, выложу завтра. Тут выкладывали функцию проекции точки на экран . function point_projection(pos) local x, y local scr_w, scr_h = dev.width, dev.height local ppp = vector():sub(pos, dev.cam_pos) local dp = dev.cam_dir:dotproduct(ppp) if dp>0 then local scr_dist_dp = 0.5 * scr_h/(math.tan(dev.fov*grad2rand*0.5)*dp) x = 512 + dev.cam_right:dotproduct(ppp)*scr_dist_dp*(1024/scr_w) y = 384 - dev.cam_top:dotproduct(ppp)*scr_dist_dp*(768/scr_h) if x<0 or x>1024 or y<0 or y>768 then x, y = nil, nil end end return x, y end Исправлена ошибка, когда метка отображалась за спиной. Если координата вне экрана, то возвращает nil. Изменено 29 Августа 2019 пользователем НаноБот 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1281354
Graff46 621 Опубликовано 2 Октября 2019 Поделиться Опубликовано 2 Октября 2019 (изменено) Различия lua_help.script между ТЧ и ЗП версиями от @abramcumner Скрытый текст + class vector2 - const story_ids::XXX + const callback::action_removed и callback::weapon_no_ammo - const key_bindings::kCAM_4 и key_bindings::kCROUCH_TOGGLE - class game_messages - class game_phases - class game_player_flags + const GAME_TYPE::eGameIDCaptureTheArtefact + const task::additional и task::storyline - const ui_events::INVENTORY_ХХХ и тому подобное + class GameGraph__LEVEL_MAP__value_type + class MEMBERS__value_type + class award_pair_t + class best_scores_pair_t + clsid::XXX + const CSightParams::eSightTypeAnimationDirection + function FS_item::ModifDigitOnly - class RPoint + class Patch_Dawnload_Progress + class rotation + class award_data - class SZoneMapEntityData - class TEX_INFO - class game_PlayerState + class profile + function class action_base::weight - class ZoneMapEntities + class suggest_nicks_cb + class account_profiles_cb + class login_operation_cb + class account_operation_cb + class found_email_cb + class store_operation_cb + function CAI_Bloodsucker::force_visibility_state(number); + function CALifeHumanBrain::can_choose_alife_tasks(boolean); + function CALifeMonsterBrain::can_choose_alife_tasks(boolean); - function alife_simulator::object(const alife_simulator*, string); + CALifeSmartTerrainTask::CALifeSmartTerrainTask (number, number); + class CActor + class CAntirad + class CArtefact + function CXXXArtefact::SwitchVisibility(boolean); + function CXXXArtefact::FollowByPath(string, number, vector); + function CXXXArtefact::GetAfRank() const; + class CBottleItem + function CConsole::execute_deferred(CConsole*, string); + function cover_point::is_smart_cover(const cover_point*); + class CDestroyablePhysicsObject - function CDialogHolder::start_stop_menu(CUIDialogWnd*, boolean); - function CDialogHolder::MainInputReceiver(); + class CPhraseScript + class CExplosiveItem + class CFoodItem + function CGameGraph::levels(const CGameGraph*); ~ class CGameTask сильно переделан. + class CGrenadeLauncher ~ class CHelicopter вроде как расширен значительно + class CInventoryBox + class CLevelChanger - class CKinematicsAnimated + class CMainMenu + class CMedkit + class CPda + class CPhysicObject - class CPhraseScript + class CRadioactiveZone + property cse_abstract::angle; и всем наследникам - function XXX::FillProps(string, class xr_vector<class PropItem *,class xalloc<class PropItem *> >&); + class cse_alife_inventory_box + class cse_alife_item_weapon_auto_shotgun ~ class cse_alife_monster_abstract и наследники + class cse_alife_monster_rat + class cse_smart_cover + const anim::capture_prepare = 1; + property game_object::bleeding + function game_object::active_detector() const; + function game_object::actor_look_at_point(vector); + function game_object::add_animation(string, boolean, vector, vector, boolean); + function game_object::add_combat_sound(string, number, enum ESoundTypes, number, number, number, string); + function game_object::aim_bone_id() const; + function game_object::aim_bone_id(string); + function game_object::aim_time(game_object*); + function game_object::aim_time(game_object*, number); + function game_object::allow_break_talk_dialog(boolean); + function game_object::allow_sprint(boolean); + function game_object::apply_loophole_direction_distance() const; + function game_object::apply_loophole_direction_distance(number); + function game_object::attachable_item_load_attach(string); + function game_object::burer_get_force_gravi_attack(); + function game_object::burer_set_force_gravi_attack(boolean); + function game_object::buy_item_condition_factor(number); + function game_object::can_select_weapon() const; + function game_object::can_select_weapon(boolean); + function game_object::can_throw_grenades() const; + function game_object::can_throw_grenades(boolean); + function game_object::character_icon(); + function game_object::community_goodwill(string); + function game_object::deadbody_can_take(boolean); + function game_object::deadbody_can_take_status(); + function game_object::deadbody_closed(boolean); + function game_object::deadbody_closed_status(); + function game_object::death_sound_enabled() const; + function game_object::death_sound_enabled(boolean); + function game_object::disable_hit_marks() const; + function game_object::disable_hit_marks(boolean); + function game_object::disable_inv_upgrade(); + function game_object::disable_show_hide_sounds(boolean); + function game_object::enable_inv_upgrade(); + function game_object::enable_level_changer(boolean); + function game_object::enable_night_vision(boolean); + function game_object::enable_torch(boolean); + function game_object::find_best_cover(vector); + function game_object::force_set_goodwill(number, game_object*); + function game_object::force_stand_sleep_animation(number); + function game_object::force_visibility_state(number); + function game_object::get_artefact(); + function game_object::get_bone_id(string) const; + function game_object::get_campfire(); - function game_object::get_bleeding() const; + function game_object::get_dest_smart_cover(); + function game_object::get_dest_smart_cover_name(); + function game_object::get_force_anti_aim(); - function game_object::get_info_time(string); + function game_object::get_movement_speed() const; + function game_object::get_physics_object(); + function game_object::get_smart_cover_description() const; + function game_object::get_visibility_state(); + function game_object::get_visual_name() const; + function game_object::give_game_news(string, string, string, number, number); + function game_object::give_game_news(string, string, string, number, number, number); - function game_object::give_game_news(string, string, Frect, number, number); + function game_object::give_talk_message2(string, string, string, string); + function game_object::group_throw_time_interval() const; + function game_object::group_throw_time_interval(number); + function game_object::idle_max_time() const; + function game_object::idle_max_time(number); + function game_object::idle_min_time() const; + function game_object::idle_min_time(number); + function game_object::invulnerable() const; + function game_object::invulnerable(boolean); + function game_object::inv_box_can_take(boolean); + function game_object::inv_box_can_take_status(); + function game_object::inv_box_closed(boolean, string); + function game_object::inv_box_closed_status(); + function game_object::in_current_loophole_fov(vector) const; + function game_object::in_current_loophole_range(vector) const; + function game_object::in_loophole_fov(string, string, vector) const; + function game_object::in_loophole_range(string, string, vector) const; + function game_object::in_smart_cover() const; + function game_object::is_door_locked_for_npc() const; + function game_object::is_inv_upgrade_enabled(); + function game_object::is_level_changer_enabled(); + function game_object::is_there_items_to_pickup() const; + function game_object::iterate_inventory_box(function<void>, object); + function game_object::level_vertex_light(const number&) const; + function game_object::lock_door_for_npc(); + function game_object::lookout_max_time() const; + function game_object::lookout_max_time(number); + function game_object::lookout_min_time() const; + function game_object::lookout_min_time(number); + function game_object::make_item_active(game_object*); + function game_object::movement_target_reached(); + function game_object::night_vision_enabled() const; + function game_object::on_door_is_closed(); + function game_object::on_door_is_open(); + function game_object::poltergeist_get_actor_ignore(); + function game_object::poltergeist_set_actor_ignore(boolean); + function game_object::register_door_for_npc(); + function game_object::register_in_combat(); + function game_object::release_stand_sleep_animation(); ~ function game_object::run_talk_dialog(game_object*, boolean); + function game_object::set_active_task(CGameTask*); + function game_object::set_capture_anim(game_object*, string, const vector&, number); + function game_object::set_collision_off(boolean); + function game_object::set_community_goodwill(string, number); - function game_object::set_character_reputation(number); + function game_object::set_dest_game_vertex_id(number); + function game_object::set_dest_loophole(); + function game_object::set_dest_loophole(string); + function game_object::set_dest_smart_cover(); + function game_object::set_dest_smart_cover(string); + function game_object::set_enemy(game_object*); + function game_object::set_force_anti_aim(boolean); + function game_object::set_home(number, number, number, boolean, number); + function game_object::set_level_changer_invitation(string); + function game_object::set_movement_selection_type(enum ESelectionType); + function game_object::set_npc_position(vector); + function game_object::set_smart_cover_target(); + function game_object::set_smart_cover_target(game_object*); + function game_object::set_smart_cover_target(vector); + function game_object::set_smart_cover_target_default(boolean); + function game_object::set_smart_cover_target_fire(); + function game_object::set_smart_cover_target_fire_no_lookout(); + function game_object::set_smart_cover_target_idle(); + function game_object::set_smart_cover_target_lookout(); + function game_object::set_smart_cover_target_selector(); + function game_object::set_smart_cover_target_selector(function<void>); + function game_object::set_smart_cover_target_selector(function<void>, object); + function game_object::set_sympathy(number); + function game_object::set_visual_memory_enabled(boolean); + function game_object::set_visual_name(string); + function game_object::set_vis_state(number); + function game_object::sniper_fire_mode() const; + function game_object::sniper_fire_mode(boolean); + function game_object::sniper_update_rate() const; + function game_object::sniper_update_rate(boolean); + function game_object::special_danger_move(); + function game_object::special_danger_move(boolean); + function game_object::start_particles(string, string); + function game_object::stop_particles(string, string); + function game_object::suitable_smart_cover(game_object*); + function game_object::switch_to_upgrade(); + function game_object::sympathy(); + function game_object::take_items_enabled() const; + function game_object::take_items_enabled(boolean); + function game_object::torch_enabled() const; + function game_object::unlock_door_for_npc(); + function game_object::unregister_door_for_npc(); + function game_object::unregister_in_combat(); + function game_object::use_smart_covers_only() const; + function game_object::use_smart_covers_only(boolean); + function game_object::weapon_grenadelauncher_status(); + function game_object::weapon_is_grenadelauncher(); + function game_object::weapon_is_scope(); + function game_object::weapon_is_silencer(); + function game_object::weapon_scope_status(); + function game_object::weapon_silencer_status(); + const hit::light_burn = 11; + const move::run_with_leader = 7; + const move::walk_with_leader = 6; + function sound_object::attach_tail(string); + function CScriptXmlInit::InitSleepStatic(string, CUIWindow*); + function CScriptXmlInit::InitTextWnd(string, CUIWindow*); + function CScriptXmlInit::InitProgressBar(string, CUIWindow*); + function CScriptXmlInit::InitListBox(string, CUIWindow*); + function CScriptXmlInit::InitMPPlayerName(string, CUIWindow*); - function CScriptXmlInit::InitList(string, CUIWindow*); - function CScriptXmlInit::ParseShTexInfo(string); - function CScriptXmlInit::InitLabel(string, CUIWindow*); - function CScriptXmlInit::InitAutoStaticGroup(string, CUIWindow*); - function CScriptXmlInit::InitButton(string, CUIWindow*); + class CSilencer + const stalker_ids::sound_enemy_lost_no_allies = 12; + const stalker_ids::sound_enemy_lost_with_allies = 13; + const stalker_ids::sound_wounded = 18; + class CTorridZone - class CUICaption + class CWeaponAmmo + class CWeaponAutomaticShotgun + class CZoneCampfire + class FactionState - class IKinematicsAnimated - class SGameTaskObjective + class smart_cover_object + class profile_store + function cast_planner(action_base*); + function IsDynamicMusic(); + function IsGameTypeSingle(); + function IsImportantSave(); + function render_get_dx_level(); + function valid_saved_game(string); - function cast_action_to_planner(action_base*); - function cast_alife_object_to_creature(cse_alife_object*); - function cast_alife_object_to_trader_abstract(cse_alife_object*); - function cast_planner_to_action(action_planner*); - function GetTextureInfo(string, string); - function GetTextureName(string); - function GetTextureRect(string); - function xrRender_test_r2_hw(); + function level.change_game_time(number, number, number); + function level.get_wfx_time(); + function level.hide_indicators_safe(); + function level.high_cover_in_direction(number, const vector&); + function level.low_cover_in_direction(number, const vector&); + function level.show_weapon(boolean); + function level.start_weather_fx_from_time(string, number); + function level.stop_weather_fx(); + function level.vertex_id(vector); - function level.cover_in_direction(number, const vector&); - function level.main_input_receiver(); - function level.start_stop_menu(CUIDialogWnd*, boolean); Изменено 2 Октября 2019 пользователем Graff46 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1287956
Graff46 621 Опубликовано 12 Октября 2019 Поделиться Опубликовано 12 Октября 2019 (изменено) Хотелось бы иметь описания методов и свойств классов: Скрытый текст C++ class action_base { property object; property storage; action_base (); action_base (game_object*); action_base (game_object*, string); function finalize(); function add_precondition(const world_property&); function execute(); function remove_precondition(const number&); function setup(game_object*, property_storage*); function set_weight(const number&); function add_effect(const world_property&); function show(string); function initialize(); function remove_effect(const number&); }; C++ class action_planner { property object; property storage; action_planner (); function initialized() const; function remove_action(const number&); function action(const number&); function add_action(const number&, action_base*); function show(string); function update(); function clear(); function evaluator(const number&); function setup(game_object*); function set_goal_world_state(action_planner*, world_state*); function current_action(); function add_evaluator(const number&, property_evaluator*); function remove_evaluator(const number&); function current_action_id() const; function actual(const action_planner*); }; C++ class planner_action : action_planner,action_base { property object; property storage; planner_action (); planner_action (game_object*); planner_action (game_object*, string); function finalize(); function action(const number&); function add_precondition(const world_property&); function add_action(const number&, action_base*); function update(); function remove_effect(const number&); function current_action(); function current_action_id() const; function initialized() const; function weight(const world_state&, const world_state&) const; function initialize(); function actual(const action_planner*); function remove_action(const number&); function remove_precondition(const number&); function execute(); function clear(); function evaluator(const number&); function set_goal_world_state(action_planner*, world_state*); function set_weight(const number&); function add_effect(const world_property&); function show(string); function setup(game_object*); function setup(game_object*, property_storage*); function remove_evaluator(const number&); function add_evaluator(const number&, property_evaluator*); }; C++ class world_state { world_state (); world_state (world_state); function clear(); function includes(const world_state&) const; operator ==(const world_state&, world_state); function remove_property(const number&); function add_property(const world_property&); operator <(const world_state&, world_state); function property(const number&) const; }; C++ class world_property { world_property (number, boolean); function value() const; operator <(const world_property&, world_property); function condition() const; operator ==(const world_property&, world_property); }; C++ class property_evaluator { property object; property storage; property_evaluator (); property_evaluator (game_object*); property_evaluator (game_object*, string); function evaluate(); function setup(game_object*, property_storage*); }; C++ class property_evaluator_const : property_evaluator { property object; property storage; property_evaluator_const (boolean); function evaluate(); function setup(game_object*, property_storage*); }; Изменено 12 Октября 2019 пользователем Graff46 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1289774
Graff46 621 Опубликовано 14 Мая 2020 Поделиться Опубликовано 14 Мая 2020 (изменено) Описания классов действий Отсюда https://xray-engine.org/index.php?title=Управление_персонажем Автор: К. Д. Скрытый текст class act { //глобальное поведение монстров //MonsterSpace::EScriptMonsterGlobalAction const rest = 0; //отдыхать. Место отдыха монстр выбирает сам. У меня ложился под дерево. const eat = 1; //кушать труп. const attack = 2; //атаковать что-нибудь const panic = 3; //убегать в панике //конструкторы: void act(); //кто его знает, зачем такой конструктор - ни одно свойство у класса выставить нельзя. void act(enum MonsterSpace::EScriptMonsterGlobalAction); //создает экшен с установленным типом поведения. Этот конструктор можно вызвать только с типом rest. attack и eat просто не будут работать, вместо panic монстр уходить спокойно погулять. void act(enum MonsterSpace::EScriptMonsterGlobalAction, game_object*); //Конструктор для eat, attack, panic. Вторым аргументом задается объект, по отношению к которому устанавливается поведение. Для eat - это объект трупа, для attack - кого атакуем, для panic - от кого бежим. }; class anim { //анимация сталкеров и монстров. //MonsterSpace::EMentalState const danger = 0; //состояние опасности const free = 1; //обычное состояние const panic = 2; //состояние паники //MonsterSpace::EScriptMonsterAnimAction const stand_idle = 0; //спокойно стоять const sit_idle = 1; //спокойно сидеть const lie_idle = 2; //спокойно лежать const eat = 3; //есть const sleep = 4; //спать const rest = 5; //отдыхать const attack = 6; //атаковать const look_around = 7; //вертеть башкой const turn = 8; //повернуться //конструкторы void anim (); //создает пустой объект экешна void anim (string caAnimationToPlay); void anim (string caAnimationToPlay, bool use_single_hand); //создает экешен с установленной анимацией //конструкторы для сталкеров void anim (enum MonsterSpace::EMentalState); //создает пустой объект экешна с установленным состоянием //!ПРОВЕРИТЬ! судя по всему, сам по себе не работает, надо использовать в паре с move //конструктор для монстров void anim (enum MonsterSpace::EScriptMonsterAnimAction, int index); //создает пустой объект экешна с установленным состоянием и индексом анимации (?). Задавал 0, все работало //методы bool completed(); //закончен ли экшн void type(enum MonsterSpace::EMentalState state); //установить состояние void anim(string caAnimationToPlay); //установить анимацию }; class cond { //установка времени действия экшена //CScriptActionCondition::EActionFlags const move_end = 1; const look_end = 2; const anim_end = 4; const sound_end = 8; const object_end = 32; const time_end = 64; const act_end = 128; //такое чувство, что не работает ничего, кроме time_end. //конструкторы. void cond (); //создает пустой объект. Непонятно, зачем. void cond (int dwFlags); // создает объект, устанавливая флаги экшенов. void cond (int dwFlags, double dTime); // создает объект, устанавливая флаги экшенов и время жизни экшена. }; class look { //установка взгляда сталкеров //SightManager::ESightType const cur_dir = 0; //смотреть по текущему направлению const path_dir = 1; //смотреть по пути const direction = 2; //смотреть в каком-то направлении const point = 3; //смотреть в точку только головой // eSightTypeObject = 4 const danger = 5; //смотреть по сторонам куда хочу, даже если придётся менять направление тела const search = 6; //смотреть по сторонам так, чтобы не менять направление тела, которое ориентировано по пути // eSightTypeLookOver = 7 // eSightTypeCoverLookOver = 8 // eSightTypeFireObject = 9 const fire_point = 10; //смотреть в точку головой и автоматом void look (); //создает пустой завешенный (!) экшн //для cur_dir и path_dir. void look (enum SightManager::ESightType tWatchType); //для остальных типов void look (enum SightManager::ESightType tWatchType, vector& direction); //tWatchType - тип взгляда, direction - точка, куда смотрим. void look (enum SightManager::ESightType tWatchType, game_object* tpObjectToWatch); void look (enum SightManager::ESightType tWatchType, game_object* tpObjectToWatch, string bone_to_watch); //tWatchType - тип взгляда, tpObjectToWatch - объект, на который смотрим, bone_to_watch - кость, на которую смотрим //по идее, тут можно задать скорость поворота, но у меня оба конструктора не работают. void look (const vector& target, float vel1, float vel2); void look (game_object* tpObjectToWatch, float vel1, float vel2); bool completed(); //закончен ли экшн void type(enum SightManager::ESightType); //установить отип взгляда. void object(game_object* tpObjectToWatch); //установить объект, на который смотрим. void bone(string); //установить кость, на которую смотрим. void direct(const vector&); //установить направление взгляда. }; class move { //движение объектов. Нельзя применять для прожекторов. //MonsterSpace::EBodyState const crouch = 0; const standing = 1; //MonsterSpace::EMovementType const walk = 0; const run = 1; const stand = 2; //DetailPathManager::EDetailPathType const curve = 0; const dodge = 1; const criteria = 2; const line = 0; const curve_criteria = 2; //CScriptMovementAction::EInputKeys const none = 1; const fwd = 2; const back = 4; const left = 8; const right = 16; const up = 32; //ShiftUp const down = 64; //ShiftDown const handbrake = 128; const on = 256; //EngineOn const off = 512; //EngineOff //MonsterSpace::EScriptMonsterMoveAction const walk_fwd = 0; const walk_bkwd = 1; //никто из монстров не умеет бегать назад. Зачем это? const run_fwd = 2; const drag = 3; const jump = 4; const steal = 5; //MonsterSpace::EScriptMonsterSpeedParam const default = 0; const force = 1; // eSP_None = -1 //конструктор объекта с дефолтными параметрами void move (); //конструкторы для машин void move (enum CScriptMovementAction::EInputKeys tInputKeys); void move (enum CScriptMovementAction::EInputKeys tInputKeys, float fSpeed); //с InputKeys все понятно, fSpeed - ограничение скорости. По умолчанию 0, то есть, нет ограничения //конструкторы для сталкерья void move (enum MonsterSpace::EBodyState tBodyState, enum MonsterSpace::EMovementType tMovementType, enum DetailPathManager::EDetailPathType tPathType, game_object* tpObjectToGo); void move (enum MonsterSpace::EBodyState tBodyState, enum MonsterSpace::EMovementType tMovementType, enum DetailPathManager::EDetailPathType tPathType, game_object* tpObjectToGo, float fSpeed); //tBodyState - в каком положении идти (сидя, стоя), tMovementType - как идти (бежать, стоять, идти), tPathType - тип пути (прямая, кривая, дуга), tpObjectToGo - за кем идти, fSpeed - с какой скоростью идти. void move (enum MonsterSpace::EBodyState tBodyState, enum MonsterSpace::EMovementType tMovementType, enum DetailPathManager::EDetailPathType tPathType, const patrol& tPatrolPathParams); void move (enum MonsterSpace::EBodyState tBodyState, enum MonsterSpace::EMovementType tMovementType, enum DetailPathManager::EDetailPathType tPathType, const patrol& tPatrolPathParams, float fSpeed); //cм выше, только вместо объекта - путь, по которому идем. void move (enum MonsterSpace::EBodyState tBodyState, enum MonsterSpace::EMovementType tMovementType, enum DetailPathManager::EDetailPathType tPathType, const vector& position); void move (enum MonsterSpace::EBodyState tBodyState, enum MonsterSpace::EMovementType tMovementType, enum DetailPathManager::EDetailPathType tPathType, const vector& position, float fSpeed); //см выше, вместо объекта - координаты, куда идем. //конструкторы для монстров. void move (enum MonsterSpace::EScriptMonsterMoveAction tAct, patrol& tPatrolPathParams); void move (enum MonsterSpace::EScriptMonsterMoveAction tAct, patrol& tPatrolPathParams, float dist_to_end); void move (enum MonsterSpace::EScriptMonsterMoveAction tAct, patrol& tPatrolPathParams, float dist_to_end, enum MonsterSpace::EScriptMonsterSpeedParam speed_param); void move (enum MonsterSpace::EScriptMonsterMoveAction tAct, vector& tPosition); void move (enum MonsterSpace::EScriptMonsterMoveAction tAct, vector& tPosition, float fSpeed); void move (enum MonsterSpace::EScriptMonsterMoveAction tAct, vector& tPosition, float fSpeed, enum MonsterSpace::EScriptMonsterSpeedParam); void move (enum MonsterSpace::EScriptMonsterMoveAction tAct, int node_id, vector& tPosition); void move (enum MonsterSpace::EScriptMonsterMoveAction tAct, int node_id, vector& tPosition, float dist_to_end); void move (enum MonsterSpace::EScriptMonsterMoveAction tAct, game_object* tpObjectToGo); void move (enum MonsterSpace::EScriptMonsterMoveAction tAct, game_object* tpObjectToGo, float dist_to_end); void move (enum MonsterSpace::EScriptMonsterMoveAction tAct, game_object* tpObjectToGo, float dist_to_end, enum MonsterSpace::EScriptMonsterSpeedParam speed_param); void move (const vector& tPosition, float dist_to_end); bool completed(); //закончен ли экшн //методы установки параметров объекта void body(enum MonsterSpace::EBodyState tBodyState); //состояние тела void move(enum MonsterSpace::EMovementType tMovementType); //тип движения void path(enum DetailPathManager::EDetailPathType tPathType); //тип пути void object(game_object* tpObjectToGo); //к кому идти void patrol(const CPatrolPath *path, shared_str path_name); //путь для движения void position(const vector& tPosition); //координаты назначения void input(enum CScriptMovementAction::EInputKeys tInputKeys); //клавиши управления }; class object { //манипуляции сталкеров с объектом (оружие, рации и типа того). Также работает для машин (открыть/закрыть дверь). //MonsterSpace::EObjectAction const switch1 = 0; const switch2 = 1; const reload = 2; const reload1 = 2; const reload2 = 3; const aim1 = 4; const aim2 = 5; const fire1 = 6; const fire2 = 7; const idle = 8; const strap = 9; const drop = 10; // eObjectActionAimReady1 = 11 // eObjectActionAimReady2 = 12 // eObjectActionAimForceFull1 = 13 // eObjectActionAimForceFull2 = 14 const activate = 15; const deactivate = 16; const use = 17; const turn_on = 18; const turn_off = 19; const show = 20; const hide = 21; const take = 22; // eObjectActionMisfire1 = 23 // eObjectActionEmpty1 = 24 // eObjectActionNoItems = 65535 const dummy = -1; //конструкторы void object (); //конструкторы для сталкеров. void object (game_object* tpLuaGameObject, enum MonsterSpace::EObjectAction tObjectActionType); void object (game_object* tpLuaGameObject, enum MonsterSpace::EObjectAction tObjectActionType, int dwQueueSize); //tpLuaGameObject – объект, с которым нужно что-то делать, tObjectActionType - что делать, dwQueueSize – размер очереди при стрельбе //конструктор для машин void object (string caBoneName, enum MonsterSpace::EObjectAction tObjectActionType); //caBoneName - имя кости (например, для того, чтобы открыть/закрыть дверь в машине (activate\deactivate)). Но у меня открыть/закрыть двери не вышло. //это не работает void object (enum MonsterSpace::EObjectAction tObjectActionType); bool completed(); //закончен ли экшн void object(string caBoneName); //установить кость, к которой присоединяем объект void object(game_object* tpLuaGameObject); //установить объект, который присоединяем void action(enum MonsterSpace::EObjectAction tObjectActionType); //установить тип экшена }; class particle { //отыгрывание на объекте партиклов //конструкторы particle (); particle (string caPartcileToRun, string caBoneName); particle (string caPartcileToRun, string caBoneName, const particle_params& tParticleParams); particle (string caPartcileToRun, string caBoneName, const particle_params& tParticleParams, bool bAutoRemove); //caPartcileToRun – имя системы частиц, caBoneName – имя кости, tParticleParams – экземпляр класса particle_param, bAutoRemove – зацикленный партикл. Gервые два параметра обязательны, остальные по умолчанию равны нулю particle (string caPartcileToRun, const particle_params& tParticleParams); particle (string caPartcileToRun, const particle_params& tParticleParams, bool bAutoRemove); //см. выше, точка проигрывания партикла берется из tParticleParams. bool completed(); //закончен ли экшн void set_velocity(const vector& vel); //установить скорость движения партикла void set_position(const vector& pos); //установить координаты партикла void set_bone(string caBoneName); //установить кость, от которой играется партикл void set_angles(const vector& angle); //установить углы (?) партикла void set_particle(string caParticleToRun, bool bAutoRemove); //установить партикл }; class particle_params { //параметры отыгрывания партиклов particle_params (); particle_params (const vector& tPositionOffset); particle_params (const vector& tPositionOffset, const vector& tAnglesOffset); particle_params (const vector& tPositionOffset, const vector& tAnglesOffset, const vector& tVelocity); }; class patrol { //параметры движения сталкеров и монстров по путям. Используется в классе move. //PatrolPathManager::EPatrolStartType const start = 0; // ePatrolStartTypeLast = 1 const nearest = 2; const custom = 3; //ePatrolStartTypePoint const next = 4; //PatrolPathManager::EPatrolRouteType const stop = 0; const continue = 1; //common const dummy = -1; patrol (string caPatrolPathToGo); patrol (string caPatrolPathToGo, enum PatrolPathManager::EPatrolStartType tPatrolPathStart); patrol (string caPatrolPathToGo, enum PatrolPathManager::EPatrolStartType tPatrolPathStart, enum PatrolPathManager::EPatrolRouteType tPatrolPathStop); patrol (string caPatrolPathToGo, enum PatrolPathManager::EPatrolStartType tPatrolPathStart, enum PatrolPathManager::EPatrolRouteType tPatrolPathStop, bool bRandom); patrol (string caPatrolPathToGo, enum PatrolPathManager::EPatrolStartType tPatrolPathStart, enum PatrolPathManager::EPatrolRouteType tPatrolPathStop, bool bRandom, int index); //аргументы конструкторов: <имя пути>, <тип старта пути>, <тип финиша пути>, <если путь имеет ветвления, то выбирать ли их случайно>. Нетрудно видеть, что первый аргумент конструктора (имя пути) - обязательный, остальные по умолчанию таковы: тип старта = patrol.nearest, тип финиша = patrol.continue, случайность = true. int level_vertex_id(int point_id) const; //возвращает число заданной точки пути. Аргумент - номер точки, начиная с 0 (pN:level_vertex_id = ... в алл.спавне). vector point(int point_id); //возвращает координаты заданной точки пути. Аргумент - номер точки, начиная с 0 (pN:position = ... в алл.спавне). bool flag(int point_id, int flag) const; //возвращает true, если значение флага в точке number1 равно number2, иначе false. Агрументы: первый - номер точки, второй - число (в оригинальных скриптах почему-то только от 1 до 32) int game_vertex_id(int point_id) const; //возвращает гейм вертекс заданной точки пути. Аргумент - номер точки, начиная с 0 (pN:game_vertex_id = ... в алл.спавне). flags32 flags(int point_id) const; //возвращает флаг данной точки пути (pN:flags = ... в алл.спавне). Аргумент - номер точки, начиная с 0. Значение флага можно узнать методом get() класса flags32 string name(int point_id) const; //возвращает название заданной точки пути. Аргумент - номер точки, начиная с 0 (pN:name = ... в алл.спавне). int index(string name) const; //возвращает id точки пути c заданным именем. bool terminal(int point_id) const; // возвращает true, если из данной точки нет переходов на другие точки и false, если есть (есть ли pN:links = ... в алл.спавне). Аргумент - номер точки, начиная с 0. int count() const; //возвращает количество точек в пути int get_nearest(const vector& pos) const; //ищет ближайшую к заданным вектором координатам точку пути }; class sound { //отыгрывание объектом звуков //MonsterSound::EType // eMonsterSoundBase = 0 const idle = 1; const eat = 2; const attack = 3; //eMonsterSoundAggressive const attack_hit = 4; const take_damage = 5; // eMonsterSoundStrike = 6 const die = 7; // eMonsterSoundDieInAnomaly = 8 const threaten = 9; const steal = 10; const panic = 11; // eMonsterSoundIdleDistant = 12 // eMonsterSoundScript = 128 // eMonsterSoundCustom = 16384 // eMonsterSoundDummy = -1 //видимо, не экспортированы, но есть void sound (string caSoundToPlay, const vector& tPosition, const vector& tAngleOffset, bool bLooped, enum MonsterSound::EType sound_type); void sound (string caSoundToPlay, string caBoneName, const vector& tPositionOffset, const vector& tAngleOffset, bool bLooped, enum MonsterSound::EType sound_type); void sound (sound_object& sound, string caBoneName, const vector& tPositionOffset, const vector& tAngleOffset, bool bLooped, enum MonsterSound::EType sound_type); void sound (sound_object& sound, const vector& tPosition, const vector& tAngleOffset, bool bLooped, enum MonsterSound::EType sound_type); //конструкторы void sound (); //конструкторы для сталкеров и монстров void sound (string caSoundToPlay, string caBoneName); void sound (string caSoundToPlay, string caBoneName, const vector& tPositionOffset); void sound (string caSoundToPlay, string caBoneName, const vector& tPositionOffset, const vector& tAngleOffset); void sound (string caSoundToPlay, string caBoneName, const vector& tPositionOffset, const vector& tAngleOffset, bool bLooped); //<sound_name>, <bone_name>, <position_offset>, <angle_offset>, <looped>. sound_name – имя звука, bone_name – имя кости, position_offset – вектор, смещение относительно позиции кости, angle_offset – вектор, угловое смещение относительно углов кости, looped – зацикленный звук. Первые два параметра обязательны, остальные по умолчанию равны нулю void sound (string caSoundToPlay, const vector& tPosition); void sound (string caSoundToPlay, const vector& tPosition, const vector& tAngleOffset); void sound (string caSoundToPlay, const vector& tPosition, const vector& tAngleOffset, bool bLooped); //см. выше, играется по умолчанию от головы void sound (sound_object& sound, string caBoneName, const vector& tPositionOffset); void sound (sound_object& sound, string caBoneName, const vector& tPositionOffset, const vector& tAngleOffset); void sound (sound_object& sound, string caBoneName, const vector& tPositionOffset, const vector& tAngleOffset, bool bLooped); //см. выше, инициализуется не строковым именем, а объектом звука (см. класс sound_object) void sound (sound_object& sound, const vector& tPosition); void sound (sound_object& sound, const vector& tPosition, const vector& tAngleOffset); void sound (sound_object& sound, const vector& tPosition, const vector& tAngleOffset, bool bLooped); //см. выше, инициализуется не строковым именем, а объектом звука (см. класс sound_object), играется по умолчанию от головы //конструкторы для монстров void sound (enum MonsterSound::EType sound_type); void sound (enum MonsterSound::EType sound_type, int delay); //sound_type – тип звука (см. перечисление выше), delay – задержка звука. //этот конструктор предполагает, что объект еще будет корчить рожи. Но, поскольку это умеет только Cидор, видимо, это для торговцев (CAI_Trader). У меня сталкеры выражение лица не меняли. void sound (string caSoundToPlay, string caBoneName, enum MonsterSpace::EMonsterHeadAnimType head_anim_type); //caSoundToPlay – имя звука, caBoneName – имя кости, head_anim_type - член перечисления MonsterSpace, анимация лица. bool completed(); //закончен ли экшн void set_position(const vector& pos); //установить координаты звука void set_bone(string caBoneName); //установить кость, от которой играется звук void set_angles(const vector& angle); //установить углы (?) звука void set_sound(string caSoundToPlay); //установить звук void set_sound(const sound_object& sound); //установить звук void set_sound_type(enum ESoundTypes sound_type); //установить тип звука. Тип брать из перечисления snd_type. }; class sound_object { //параметры отыгрывания звуков const looped = 1; const s2d = 2; const s3d = 0; property frequency; property max_distance; property min_distance; property volume; sound_object (string); sound_object (string, enum ESoundTypes); function set_position(const vector&); function stop_deffered(); function get_position() const; function play_no_feedback(game_object*, number, number, vector, number); function play_at_pos(game_object*, const vector&); function play_at_pos(game_object*, const vector&, number); function play_at_pos(game_object*, const vector&, number, number); function stop(); function length(); function play(game_object*); function play(game_object*, number); function play(game_object*, number, number); function playing() const; }; Возможно можно добавить в шапку ссылку на данный пост. Изменено 14 Мая 2020 пользователем Graff46 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1331084
mdm64 586 Опубликовано 28 Августа 2020 Поделиться Опубликовано 28 Августа 2020 Доброго времени! Вопрос - как реализовать в ЗП, чтобы группировка относилась к одному (!) из НПС из враждебной группировки как к своему, независимо ни от чего, этакий "свой среди чужих"? Если это возможно, конечно, в ЗП. В ТЧ я когда-то такое видел, но вроде как отличия между платформами существенные. Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1346831
h0N0r 383 Опубликовано 26 Октября 2021 Поделиться Опубликовано 26 Октября 2021 Найдено в ориг. исходниках ЗП 1.6.02: Скрытый текст *************************************** В секции bloodsucker: if(pSettings->line_exist(section,"collision_hit_off")){ collision_hit_off = true; bloodsucker / boar: if(!pSettings->line_exist(section,"is_friendly")) com_man().add_ability(ControlCom::eControlRunAttack); // атака на бегу Проверка на наличие строки в секции, но она должна быть с параметром (1 или on), наподобие af_actor_properties = on в ТЧ, включает показ параметров арта в описании, а удаление это строки - отключает: ui_af_params.cpp, bool CUIArtefactParams::Check(const shared_str& af_section) { return !!pSettings->line_exist(af_section, "af_actor_properties"); } *************************************** В m_stalker.ltx, секция [fire_queue_params]: (эти параметры есть в движке, но не добавлены в конфиг) pstl_queue_fire_dist_med = 15.0 pstl_queue_fire_dist_far = 30.0 shtg_queue_fire_dist_med = 15.0 shtg_queue_fire_dist_far = 30.0 snp_queue_fire_dist_med = 15.0 snp_queue_fire_dist_far = 30.0 mchg_queue_fire_dist_med = 15.0 mchg_queue_fire_dist_far = 30.0 auto_queue_fire_dist_med = 15.0 auto_queue_fire_dist_far = 30.0 *************************************** В секции уровня (game_maps_single.ltx): minimap_zoom = 1 ; -< 1=normal >+ (масштаб миникарты) *************************************** В секции device_pda, или унаследованной от неё: play_function = file.function (типа xr_effects.pda_play_function) *************************************** В кастомдате мутанта можно переопределять параметры базовой секции (base_monster_startup.cpp): [settings_overrides] SoundThreshold RunAttack_PathDistance RunAttack_StartDistance DayTime_Begin DayTime_End distance_to_corpse satiety_threshold DamagedThreshold idle_sound_delay eat_sound_delay attack_sound_delay distant_idle_sound_delay distant_idle_sound_range eat_freq eat_slice eat_slice_weight LegsCount max_hear_dist attack_effector Это не подходит для ЗП, т.к. вся живность спавнится другими методами, не используя all.spawn, но можно в ТЧ. *************************************** Хак от GSC В базовой секции [stalker], или унаследованной от неё (CharacterPhysicsSupport.cpp): hack_terrible_donot_collide_on_spawn = true ; отключает коллизию 4 Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1399748
aromatizer 4 572 Опубликовано 26 Октября 2021 Поделиться Опубликовано 26 Октября 2021 25 минут назад, h0N0r сказал: pstl_queue_fire_dist_med = 15.0 pstl_queue_fire_dist_far = 30.0 shtg_queue_fire_dist_med = 15.0 shtg_queue_fire_dist_far = 30.0 snp_queue_fire_dist_med = 15.0 snp_queue_fire_dist_far = 30.0 mchg_queue_fire_dist_med = 15.0 mchg_queue_fire_dist_far = 30.0 auto_queue_fire_dist_med = 15.0 auto_queue_fire_dist_far = 30.0 Странно, что для пистолетов, дробовиков, снайперок и автоматического оружия заданы одинаковые дистанции... Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1399749
Tiran_ua 0 Опубликовано 15 Февраля 2023 Поделиться Опубликовано 15 Февраля 2023 (изменено) Всем добра! Перейду сразу к сути вопроса. Есть некая функция (скажем klonilka.save_itm()), которая читает название предмета, передаваемого NPC, и сохраняет его в виде переменной sis в pstor. Внимание вопрос: как запросить (sis, inv_name) в xml формате для вставки в диалог? Изменено 15 Февраля 2023 пользователем Tiran_ua Ссылка на комментарий https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/page/27/#findComment-1451134
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти