Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[ ----------------------------------------------------------------------------------------------
- File : lua_help_prosectors.script
- Description: документация по движковым правкам
- Copyright : 2015 © Prosectors Project
- Author : Karlan
- --]] ----------------------------------------------------------------------------------------------
- List of the classes exported to LUA
- C++ class alife_simulator {
- function create_level_changer(alife_simulator*, string, const vector&, number, number, string, const vector&, const vector&, number, number); --// создание перехода
- function assign_lc_settings(number, number, number, number); --// настройки перехода (айди, сид, радиус, сайлент)
- function create_space_restrictor(alife_simulator*, string, const vector&, number, number, number, number, string); --// см. lua_helper.lua
- };
- C++ class CPhrase {
- function GetGoodwillLevel(); --// позволит задавать благосклонность фразе, последний параметр AddPhrase, но при ПЕРЕстроении графа ими будет пользоваться сподручнее
- function SetGoodwillLevel(number);
- --// Karlan->ALL: финалайзер доделывать или нет? помоему он не нужен, мишура все это
- };
- C++ class CPhraseDialog {
- CPhraseDialog() --// конструктор класса
- --// Karlan->ALL: полной динамики я пока не добился
- --// FIXME почему-то не строится граф, вроде бы все вершины и ребра явно прописываю, но граф в итоге получается абсолютно полностью избитый, возможно для полной динамики придется сделать еще один подкласс, где будут методы полного построения графа в скриптах, так что пока динамический граф можно строить только из шаблонов
- function GetDialog(string); --// для теста
- function SetCaption(string); --// позволяет на лету указать(изменить) заголовок (показывается вместо нулевой фразы) (рекомендуется вызывать ДО создания графа(!))
- function SetPriority(number); --// позволяет на лету указать(изменить) приоритет (рекомендуется вызывать ДО создания графа(!))
- function IsFinished(); --// проверяет есть ли еще какие-то доступные фразы в графе, если true, то выкинет в список выбора темы
- };
- C++ class CPhraseScript {
- function SetScriptText(string); --// позволяет задать текст скриптом, на входе айди диалога и айди сказанной фразы в строковых представлениях
- };
- C++ class callback {
- saw_object = 16;
- on_start_dialog = 28;
- on_stop_dialog = 29;
- on_inv_box_close = 69;
- };
- C++ class game_object {
- property bleeding (number); --// кровотечение в режиме RW, запись работает в стиле change
- --// CScriptGameObject
- function set_spawn_ini(string); --// позволяет установить кастом дату гейм объекту (set_custom_data ставит кастом дату серверному объекту)
- function visible_bone(string, boolean); --// скрыть/показать кость по имени
- --// CActor
- function is_enable_slots(); --// клавиши слотов заблокированы?
- function enable_slots(boolean); --// заблокировать клавиши слотов
- function get_total_volume(); --// суммарный доступный объем в рюкзаке (броник+рюкзак)
- function add_tip_static(string, number); --// выводит статик аналогичный tip_text, который появляется при удержании взгляда на объекте, еще один скриптовый костыль в движке
- --// CAI_Stalker
- function take_items_enabled(boolean); --// разрешить/запретить взаимодействие с окружающими объектами сталкеру (по умолчанию взаимодействует)
- --// CInentoryOwner
- function add_dialog(string); --// добавить акторский диалог <actor_dialog/> НПСу по dialog_id
- function switch_to_talk(); --// фактически написан с нуля, переключает режим торговли(!) в режим диалога, если будут другие окна это стоит учитывать
- function is_shown_trade_btn(); --// кнопка "Торговать" скрыта?
- function show_trade_btn(boolean); --// скрыть кнопку "Торговать" --// Karlan->Karlan: сделать 'need_update'
- function get_total_ruck_volume(); --// суммарный объем предметов в рюкзаке (слоты, пояс и т.д. не учитываются)
- function has_object(string, number); --// проверяет наличие определенного количества итема определенной секции (для ящиков пока не работает), н-р: if actor:has_object('medkit', 5) then, также есть возможность проверить один объект, н-р: if actor:has_object('conserva') then, теоретически работает быстрее чем стандартный if actor:object(item) then
- function has_list_objects(lua_State *L); --// перегруженная функция, есть два варианта проверки листа, первый вариант (он работает по умолчанию) вернет true, если есть ВСЕ итемы из списка (include type), второй вариант вернет true если есть ХОТЯ БЫ ОДИН итем из списка (exclude type), для ящиков пока не работает(!)
- function force_set_goodwill(number, game_object*); --// см. lua_helper.lua
- function community_goodwill(string);
- function set_community_goodwill(string, number);
- function sympathy();
- function set_sympathy(number);
- --// СInventoryBox
- function get_total_box_volume(); --// суммарный объем предметов в боксе
- function set_max_box_volume(number); --// установить максимально доступный объем в боксе
- --// CInventoryItem
- function volume(); --// объем предмета
- function get_slot(); --// номер слота в который сейчас можно положить предмет (может не совпадать с конфигом)
- function condition_dec(); --// декремент кондиции, устанавливается в игровых часах
- --// CInventoryBag
- function get_backpack_volume(); --// получить макимальный объем рюкзака
- function set_backpack_volume(number); --// установить макимальный объем рюкзака
- function is_broken(); --// <bool> рюкзак порван?
- --// CBaseMonster
- function set_home(string, number, number, boolean, number); --// см. mob_home.script
- function set_home(number, number, number, boolean, number);
- function is_active_home(); --// активен ли хом, возвращает булево
- --// СAIBloodsucker
- function berserk(); --// починил берсерка кровососу, теперь эта функция реально ставит этот режим кровососу, но надо переделывать как задумывалось
- --// CGameObject
- function get_inventory_box(game_object*);
- function get_inventory_bag(game_object*);
- --// CWeapon
- function get_type_ammo_in_magazine(); --// возвращает текущий тип патронов, который используется (или, если разряжен, использовался) в оружии
- };
- C++ class CInventoryItem {
- property inv_grid_x (number);
- property inv_grid_y (number);
- };
- C++ class CEatableItem : CInventoryItem {
- property eat_start_portions_num (number);
- };
- C++ class CInventoryBag : CInventoryItemObject { --// класс инвентарного рюкзака
- property class_id;
- property class_name;
- property cost (number);
- property inv_weight (number);
- property item_condition (number);
- property item_flags (number);
- property item_name;
- property item_name_short;
- property item_place;
- property volume (number);
- property condition_take_dec (number);
- property condition_bag_broken (number);
- property radiation_accum_factor (number);
- property radiation_accum_limit (number);
- property radiation_restore_speed (number);
- property schedule_max;
- property schedule_min;
- property se_object;
- property slot (number);
- property slots (object);
- property updated_times (number);
- function Visual();
- function _construct();
- function net_Import(net_packet&);
- function getVisible() const;
- function net_Spawn(cse_abstract*);
- function set_schedule(ISheduled*, number, number);
- function load_config(string);
- function test_server_flag(number) const;
- function net_Export(net_packet&);
- function getEnabled() const;
- function use(CGameObject*);
- };
- C++ class CHelmet : CInventoryItemObject { --// класс шлема
- property burn_protection (number);
- property chemical_burn_protection (number);
- property immunities;
- property class_id;
- property class_name;
- property cost (number);
- property explosion_protection (number);
- property fire_wound_protection (number);
- property inv_weight (number);
- property item_condition (number);
- property item_flags (number);
- property item_name;
- property item_name_short;
- property item_place;
- property physic_strike_protection (number);
- property power_loss (number);
- property radiation_accum_factor (number);
- property radiation_accum_limit (number);
- property radiation_protection (number);
- property radiation_restore_speed (number);
- property schedule_max;
- property schedule_min;
- property se_object;
- property shock_protection (number);
- property slot (number);
- property slots (object);
- property strike_protection (number);
- property telepatic_protection (number);
- property updated_times (number);
- property wound_2_protection (number);
- property wound_protection (number);
- function Visual();
- function _construct();
- function net_Import(net_packet&);
- function getVisible() const;
- function net_Spawn(cse_abstract*);
- function set_schedule(ISheduled*, number, number);
- function load_config(string);
- function test_server_flag(number) const;
- function net_Export(net_packet&);
- function getEnabled() const;
- function use(CGameObject*);
- };
- C++ class CArtefact : CInventoryItemObject { --// "новые" свойства артов
- property additional_inventory_weight(number); --// у нас в проекте не указывать, он бесполезен, я его вырезать хочу, влияет только на обездвиживающий перегруз, которого у нас нет
- property additional_inventory_weight2(number);
- property psy_health_restore_speed (number);
- };
- C++ class CCustomOutfit : CInventoryItemObject { --// дополнил экспорт броников
- property artefact_count(number);
- property helmet_avaliable(boolean);
- property immunities;
- };
- C++ class CStalkerOutfit : CCustomOutfit {
- property artefact_count(number);
- property helmet_avaliable(boolean);
- property immunities;
- };
- C++ class hit {
- const wound_2 = 9;
- const physic_strike = 10;
- };
- C++ CSE_Abstract : {
- property direction (vector);
- set_custom_data(string);
- set_name(string); --// если такое имя уже есть, то пропускает эту функцию, устанавливает обычное движковое имя и ругается в логе
- };
- C++ class CSE_ALifeObject : CSE_Abstract {
- use_ai_locations(boolean);
- };
- C++ class CUIStatic : CUIWindow {
- function InitTextureEx(string, string); --// создать текстуру с возможностью задания другого шейдера (по умолчанию hud/default)
- --// с анимациями есть еще ЗП вариант, какой будет удобнее использовать, такой и сделаем, пока вывел ТЧ вариант
- function SetColorAnimation(string, boolean, boolean, boolean, boolean); --// добавляет анимацию для статика (имя анимации, цикличность, альфа, установить анимацию на текст, установить анимацию на текстуру)
- function SetColorAnimationDelay(float); --// время анимации
- function ResetColorAnimation(); --// сбросить анимацию
- function SetHintText(string); --// установить хинт (всплывающая подсказка, также работает для CUIButton и всех его дочек)
- };
- C++ class CUIMainIngameWnd : CUIWindow {
- function ShowZoneMap(boolean); --// показать/скрыть мини-карту со всеми дочками
- };
- C++ class CUIListBox : CUIScrollView {
- CUIListBox ();
- function SetWindowName(string);
- function Enable(boolean);
- function RemoveWindow(CUIWindow*);
- function ScrollToBegin();
- function GetMinScrollPos();
- function AddWindow(CUIWindow*, boolean);
- function GetWidth() const;
- function Clear();
- function DetachChild(CUIWindow*);
- function SetPPMode();
- function IsShown();
- function Show(boolean);
- function GetHeight() const;
- function IsEnabled();
- function ResetPPMode();
- function GetWndPos(CUIWindow*);
- function GetCurrentScrollPos();
- function SetAutoDelete(boolean);
- function AttachChild(CUIWindow*);
- function AddTextItem(string);
- function SetWndPos(vector2);
- function ScrollToEnd();
- function RemoveItem(CUIWindow*);
- function GetMaxScrollPos();
- function GetItemByIndex(number);
- function WindowName();
- function GetSelectedIndex();
- function GetSelectedItem();
- function SetWndRect(Frect);
- function SetScrollPos(number);
- function GetSize();
- function RemoveAll();
- function ShowSelectedItem(boolean);
- function SetWndSize(vector2);
- function GetItem(number);
- function IsAutoDelete();
- };
- C++ class CUIFrameWindow : CUIWindow {
- function InitTexture(string);
- };
- C++ class CDialogHolder {
- function GetDialogToRender(CUIWindow*);
- };
- C++ class CUIGameCustom {
- function GetDialogToRender(CUIWindow*);
- };
- C++ class CUITrackBarScript : CUIWindow { --// мне пришлось писать новый класс (позже накручу плюшек на него), так как CUITrackBar тесно связан с опциями, и при работе с ним начинаются жуткие баги из-за кривой реализации сохранения, этот класс я специально сделал для создания баров через скрипты, работает изолированно и наследуется только от CUIWindow, в дальнейшем скорее всего оптимизирую наследование, и "опциональный" трекбар унаследую от этого класса
- function SetCheck(boolean); --// устанавливает значение при true в максимум, при false в минимум, пока работает только с integer(!) TODO:
- function GetCheck(); --// есть-ли текущее значение? пока проверяет только integer(!) TODO:
- function IsChanged(); --// значение изменилось?
- function SetStep(number); --// устанавливает шаг трекинга
- function GetStep(); --// получает шаг трекинга
- function GetValue(); --// текущее значение
- function SetValue(number); --// установить значение (так же меняется позиция ползунка в зависимости от значения)
- function GetBackupValue(); --// получить предыдущее значение
- function SetBackupValue(number); --// установить предыдущее значение
- function GetBtn(); --// получить кнопку в виде объекта CUI3Button (временное решение, далее сделаю корректную кастомизацию графики)
- function GetFrame(); --// получить первый фрейм в виде объекта CUIFrameLineWnd (временное решение, далее сделаю корректную кастомизацию графики)
- function GetFrameD(); --// получить второй фрейм в виде объекта CUIFrameLineWnd (временное решение, далее сделаю корректную кастомизацию графики)
- };
- C++ class SGameTaskObjective {
- function set_real_description(string); --// установить статик дескрипшн
- };
- C++ class CGameTask {
- function set_description(string); --// установить статик дескрипшн
- function get_description(); --// получить статик дескрипшн
- };
- End of list of the classes exported to LUA
- List of the namespaces exported to LUA
- namespace {
- function bit_left(number, number);
- function bit_right(number, number);
- namespace game {
- function set_user_time(number); --// создать объект времени по заданному времени
- function get_user_time(CTime*); --// вернуть время созданного объекта времени
- };
- namespace level {
- --// WARNING!!! тут надо следить за тем что-бы айди не пересекались, айди создается генератором точно также как-будто спавним новый предмет, возвращает айди или можно ловить в коллбеке
- function map_add_position_spot_ser(const vector&, string, string, string); --// добавить метку на карту по позиции (возвращает айди метки), объект не создается
- function map_highlight_spot(number, string, string);--// закрасить метку цветом, третий параметр - цвет в формате "r,g,b,a" без пробелов
- function map_get_spot_hint(number, string);
- function object_by_name(string); --// не рекомендуется часто использовать как и object_by_id
- function iterate_objects(function<void>); --// ну очень полезная функция для тех кто понимает ;) в функцию падает он самый
- function get_talker(); --// скриптовый объект собеседника, активен только пока говорим, последнего собеседника можно выловить в коллбеке (специально для этого и переделал)
- };
- namespace relation_registry {
- function community_relation(string, string); --// см. lua_helper.lua
- function set_community_relation(string, string, number);
- function get_general_goodwill_between(number, number);
- };
- namespace string_table { --// для ingame доступа к строкам
- function add_string(string, string); --// добавить строку с указанным айди
- function delete_string(string); --// удалить строку
- function has_string(string); --// проверка на существование строки с указанным айди (Karlan->ALL: тут можно дополнительно компарить значение, если надо, то сделаю)
- function reload_strings(); --// перезагрузить строки
- function replace_string(string, string); --// заменить строку с указанным айди
- };
- };
- End of list of the namespaces exported to LUA
- --//-----------------------------------------------------------------------------------------------------
- --[[
- Что сделано помимо явно экспортированных нововведений, но, тем не менее, прямо влияет на игру:
- - сделал кастомизацию дождя (помогает избавится от бага дальности отрисовки дождя, фпс не страдает) (см. rain.ltx)
- - подправлен дефайн R1_EXCLUDE (вырезана опция статики)
- - fix для спавна аномалий с m_artefact_spawn_count = 0
- - сделал звуки при включении и выключении фонарика (см. torch.ltx), звуки сделал и прогнал через СДК
- - поменял функцию чтения имени и дескрипшена итемов, теперь читается без кавычек, так что можно оформлять прямо в конфиге в стиле как будто xml
- - добавил параметр heading_angle для мапспотов, позволяет поворачивать метку на заданный угол
- - фикс зума карты, когда при большом отдалении пропадали все метки
- - починил параметр satiety_critical, теперь критическая сытость реально будет работать
- - починил инфопоршни пда (теперь выдаются верно, в файле прокомментировал, но все равно надо писать обвязку, возможно позже доделаю прямо в движке)
- - добавил тег location_level для метки, позволяет задавать приоритет метки и без багов реализовать пометку местностей как в ЗП
- - добавил систему бустеров как в ЗП
- - добавил подсветку слотов и драг-дропа как в ЗП
- - переделал пояс для артефактов, работает как в ЗП в зависимости от ключа artefact_count в костюмах
- - добавил новую систему индикаторов, текстуры пока взял из ЗП
- - добавлены шлемы со всеми вытекающими (аналогия ЗП, но некоторая часть кода переписана)
- - дополнение для II_DOC, теперь в ключе document_info можно писать информацию которую получит персонаж при обретении предмета
- - зафиксил зум у оружия и бинокля, исправление ошибок и убрал стартовый максимальный зум, теперь стартовый - минимальный
- - переделан condition_progress_bar, ранее был вообще отключен, так как в 188 ревизии был слишком криво сделан, сейчас все работает как нужно
- - добавил кастом-статик предупреждающий о том, что заканчивается виртуальная память
- - добавил выделение живых объектов рамками как в бинокле для CWeaponMagazined и это также отдельно можно задавать в самих прицелах, также сделал сохранение зума
- - фикс расчета различной статистики во вкладке пда "Статистика"
- - добавил систему рюкзаков и объемы для рюкзаков и боксов (см. backpacks.ltx, inventory_boxes.ltx)
- - добавил горячие клавиши в окно обыска трупов и ящиков, теперь по LSHIFT происходит перемещение итемов одной секции из одного объекта в другой, по X перемещение всех объектов ("Взять все")
- - теперь качество еды (насыщение) зависит от ее состояния (ключ cond_dec, по умолчанию ноль - не тухнет вообще), если совсем протухла, то вообще не насытитесь ни на сколько
- - оптимизировал калькуляции инвентаря, фактически ощущается реальный прирост к скорости работы гуя
- - пофиксил <money infinitive=...>, теперь он нормально работает, и при указании этого ключа можно продать стафф абсолютно на любую сумму вне зависимости от min/max
- - переделан eat_cond_dec на cond_dec, теперь ключ работает для всех итемов, вроде как потенциальная порча, было необходимо, так как некоторые итемы которые надо портить - не еда
- - для еды сделал рандомное установление состояния в теге supplies, теперь берется от 0.0 до cond при наличии cond_dec, в нашем случае избавляет от дополнительного скриптового костыля
- - сделал статик описания задания (CGameTask) и подзадания (SGameTaskObjective) (см. пример в <game_task id="esc_flash_task"...>), держите TAB на основном окне и смотрите как оно
- - скорость передвжиения зависит от загруженности ГГ, чем больше на себе несет тем медленее передвигается/прыгает, коэффициент потом обвяжу в конфиге актора и в бустерах, по выносливости еще есть предложение сделать накопленную усталость которую связать со сном и отдыхом, тоже просто делается, вопрос надобности и самой идеи (todo: попросить написать диздок)
- - переписан расчет сытости, теперь еще зависит от передвжения, чем активнее двигаемся, тем быстрее настанет голод (todo: привязать к массе и сделать кастомизацию), от спринта очень сильно убавляется сытость, при критической сытости у нас есть чуть больше 15 минут реального времени что-бы найти что-то съедобное, иначе смерть
- - фиксы джампинга (в оригинале мог прыгать при истощении и т.п.), почва для спецфункций мувемента (с ними получится более проработанная система каждого типа передвижения), их буду делать если будут по документу, пока ожидаю диздок по кондишнам
- - добавил код в движок, чтобы торговля видела рюкзаки и не давала родить тупые неприятные случаи для игрока
- - исправил вывод информации о всякой скорострельности для аддонов, теперь если в секции встречается wpn_addon, то инфа не покажется
- - добавил дабл прогресс бар и переписал окно информации об оружии, переделал прогресс бары на дабл прогресс бары, сделал емкость и список которые патроны подходят (опирался на ЗП, но там список боеприпасов криво сделан), пишется только первый, а иконки только к первому и второму, а ведь их может быть даже не пять
- - написал новый класс CUITrackBarScript, который предназначен специально для скриптов, оригинальный не в состоянии работать отдельно от меню (иначе меню начинает сильно баговать)
- - диалоги теперь не кешируются, а загружаются каждый раз при обращении к ним (позволяет перестраивать графы диалогов по ходу игры), так же динамические диалоги будут создаваться каждый раз по разному, ранее скриптовые диалоги оседали в памяти навечно, и после первого построения рандомного графа далее о рандоме речи быть не могло, даже после перезапуска программы
- - теперь можно вешать несколько секций прицелов на один ствол, если все будет нормально включу и для остального
- - переписал класс CUIButtonHint, получился достаточно функциональный, расчет позиции переписал не от окна, а от фрейма, так гораздо вернее, далее есть мысли сделать дочерний класс с богатой кастомизацией, чтобы в хинте можно было выводить все элементы
- - добавил для артефактов psy_health_restore_speed, additional_weight, additional_weight2 (последние два пока не дописал в окно описания, так как планирую его полностью переписать на нормальный вариант без потяжек текстур)
- - добавил флаг ph_skeleton_collision_enabled в секцию объекта, который поволит сохранить коллизию после смерти
- - в лампы и дестрой объекты добросил тип и айди оружия в хит-коллбек, у других надо тоже будет, но как-нибудь в другой раз
- - подкуртил плоть, а то заколебали тикать постоянно, также надо будет остальных подкрутить, а то тоже тикают, один раз 4 кабана убежали когда я в куртке с разряженной СВД был
- - переписал окно описания артефактов, теперь статики отображаются корректно, без растяжек
- - добавил hit_callback для CCar и CHelicopter
- - монстров можно обыскивать только если в руках нож, и он не тупой
- ]]--
- --//-----------------------------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement