Advertisement
Karlan88

lua_help_prosectors.script

Jul 26th, 2016
837
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 33.47 KB | None | 0 0
  1. --[[ ----------------------------------------------------------------------------------------------
  2.  File       : lua_help_prosectors.script
  3.  Description: документация по движковым правкам
  4.  Copyright  : 2015 © Prosectors Project
  5.  Author     : Karlan
  6. --]] ----------------------------------------------------------------------------------------------
  7. List of the classes exported to LUA
  8.  
  9. C++ class alife_simulator {
  10.     function create_level_changer(alife_simulator*, string, const vector&, number, number, string, const vector&, const vector&, number, number); --// создание перехода
  11.     function assign_lc_settings(number, number, number, number); --// настройки перехода (айди, сид, радиус, сайлент)
  12.     function create_space_restrictor(alife_simulator*, string, const vector&, number, number, number, number, string); --// см. lua_helper.lua
  13. };
  14.  
  15. C++ class CPhrase {
  16.     function GetGoodwillLevel(); --// позволит задавать благосклонность фразе, последний параметр AddPhrase, но при ПЕРЕстроении графа ими будет пользоваться сподручнее
  17.     function SetGoodwillLevel(number);
  18. --// Karlan->ALL: финалайзер доделывать или нет? помоему он не нужен, мишура все это
  19. };
  20.  
  21. C++ class CPhraseDialog {
  22.     CPhraseDialog() --// конструктор класса
  23.     --// Karlan->ALL: полной динамики я пока не добился
  24.     --// FIXME почему-то не строится граф, вроде бы все вершины и ребра явно прописываю, но граф в итоге получается абсолютно полностью избитый, возможно для полной динамики придется сделать еще один подкласс, где будут методы полного построения графа в скриптах, так что пока динамический граф можно строить только из шаблонов
  25.     function GetDialog(string); --// для теста
  26.     function SetCaption(string); --// позволяет на лету указать(изменить) заголовок (показывается вместо нулевой фразы) (рекомендуется вызывать ДО создания графа(!))
  27.     function SetPriority(number); --// позволяет на лету указать(изменить) приоритет (рекомендуется вызывать ДО создания графа(!))
  28.     function IsFinished(); --// проверяет есть ли еще какие-то доступные фразы в графе, если true, то выкинет в список выбора темы
  29. };
  30.  
  31. C++ class CPhraseScript {
  32.     function SetScriptText(string); --// позволяет задать текст скриптом, на входе айди диалога и айди сказанной фразы в строковых представлениях
  33. };
  34.  
  35. C++ class callback {
  36.     saw_object = 16;
  37.     on_start_dialog = 28;
  38.     on_stop_dialog = 29;
  39.     on_inv_box_close = 69;
  40. };
  41.  
  42. C++ class game_object {
  43.  property           bleeding                (number); --// кровотечение в режиме RW, запись работает в стиле change
  44. --// CScriptGameObject
  45.     function set_spawn_ini(string); --// позволяет установить кастом дату гейм объекту (set_custom_data ставит кастом дату серверному объекту)
  46.     function visible_bone(string, boolean); --// скрыть/показать кость по имени
  47. --// CActor
  48.     function is_enable_slots(); --// клавиши слотов заблокированы?
  49.     function enable_slots(boolean); --// заблокировать клавиши слотов
  50.     function get_total_volume(); --// суммарный доступный объем в рюкзаке (броник+рюкзак)
  51.     function add_tip_static(string, number); --// выводит статик аналогичный tip_text, который появляется при удержании взгляда на объекте, еще один скриптовый костыль в движке
  52. --// CAI_Stalker
  53.     function take_items_enabled(boolean); --// разрешить/запретить взаимодействие с окружающими объектами сталкеру (по умолчанию взаимодействует)
  54. --// CInentoryOwner
  55.     function add_dialog(string); --// добавить акторский диалог <actor_dialog/> НПСу по dialog_id
  56.     function switch_to_talk(); --// фактически написан с нуля, переключает режим торговли(!) в режим диалога, если будут другие окна это стоит учитывать
  57.     function is_shown_trade_btn(); --// кнопка "Торговать" скрыта?
  58.     function show_trade_btn(boolean); --// скрыть кнопку "Торговать" --// Karlan->Karlan: сделать 'need_update'
  59.     function get_total_ruck_volume(); --// суммарный объем предметов в рюкзаке (слоты, пояс и т.д. не учитываются)
  60.     function has_object(string, number); --// проверяет наличие определенного количества итема определенной секции (для ящиков пока не работает), н-р: if actor:has_object('medkit', 5) then, также есть возможность проверить один объект, н-р: if actor:has_object('conserva') then, теоретически работает быстрее чем стандартный if actor:object(item) then
  61.     function has_list_objects(lua_State *L); --// перегруженная функция, есть два варианта проверки листа, первый вариант (он работает по умолчанию) вернет true, если есть ВСЕ итемы из списка (include type), второй вариант вернет true если есть ХОТЯ БЫ ОДИН итем из списка (exclude type), для ящиков пока не работает(!)
  62.     function force_set_goodwill(number, game_object*); --// см. lua_helper.lua
  63.     function community_goodwill(string);
  64.     function set_community_goodwill(string, number);
  65.     function sympathy();
  66.     function set_sympathy(number);
  67. --// СInventoryBox
  68.     function get_total_box_volume(); --// суммарный объем предметов в боксе
  69.     function set_max_box_volume(number); --// установить максимально доступный объем в боксе
  70. --// CInventoryItem
  71.     function volume(); --// объем предмета
  72.     function get_slot(); --// номер слота в который сейчас можно положить предмет (может не совпадать с конфигом)
  73.     function condition_dec(); --// декремент кондиции, устанавливается в игровых часах
  74. --// CInventoryBag
  75.     function get_backpack_volume(); --// получить макимальный объем рюкзака
  76.     function set_backpack_volume(number); --// установить макимальный объем рюкзака
  77.     function is_broken(); --// <bool> рюкзак порван?
  78. --// CBaseMonster
  79.     function set_home(string, number, number, boolean, number); --// см. mob_home.script
  80.     function set_home(number, number, number, boolean, number);
  81.     function is_active_home(); --// активен ли хом, возвращает булево
  82. --// СAIBloodsucker
  83.     function berserk(); --// починил берсерка кровососу, теперь эта функция реально ставит этот режим кровососу, но надо переделывать как задумывалось
  84. --// CGameObject
  85.     function get_inventory_box(game_object*);
  86.     function get_inventory_bag(game_object*);
  87. --// CWeapon
  88.     function get_type_ammo_in_magazine(); --// возвращает текущий тип патронов, который используется (или, если разряжен, использовался) в оружии
  89. };
  90.  
  91. C++ class CInventoryItem {
  92.  property           inv_grid_x               (number);
  93.  property           inv_grid_y               (number);
  94. };
  95.  
  96. C++ class CEatableItem : CInventoryItem {
  97.  property           eat_start_portions_num   (number);
  98. };
  99.  
  100. C++ class CInventoryBag : CInventoryItemObject { --// класс инвентарного рюкзака
  101.  property           class_id;
  102.  property           class_name;
  103.  property           cost                     (number);
  104.  property           inv_weight               (number);
  105.  property           item_condition           (number);
  106.  property           item_flags               (number);
  107.  property           item_name;
  108.  property           item_name_short;
  109.  property           item_place;
  110.  property           volume                   (number);
  111.  property           condition_take_dec       (number);
  112.  property           condition_bag_broken     (number);
  113.  property           radiation_accum_factor   (number);
  114.  property           radiation_accum_limit    (number);
  115.  property           radiation_restore_speed  (number);
  116.  property           schedule_max;
  117.  property           schedule_min;
  118.  property           se_object;
  119.  property           slot                     (number);
  120.  property           slots                    (object);
  121.  property           updated_times            (number);
  122.    
  123.     function Visual();
  124.     function _construct();
  125.     function net_Import(net_packet&);
  126.     function getVisible() const;
  127.     function net_Spawn(cse_abstract*);
  128.     function set_schedule(ISheduled*, number, number);
  129.     function load_config(string);
  130.     function test_server_flag(number) const;
  131.     function net_Export(net_packet&);
  132.     function getEnabled() const;
  133.     function use(CGameObject*);
  134. };
  135.  
  136. C++ class CHelmet : CInventoryItemObject { --// класс шлема
  137.  property           burn_protection          (number);
  138.  property           chemical_burn_protection (number);
  139.  property           immunities;
  140.  property           class_id;
  141.  property           class_name;
  142.  property           cost                     (number);
  143.  property           explosion_protection     (number);
  144.  property           fire_wound_protection    (number);
  145.  property           inv_weight               (number);
  146.  property           item_condition           (number);
  147.  property           item_flags               (number);
  148.  property           item_name;
  149.  property           item_name_short;
  150.  property           item_place;
  151.  property           physic_strike_protection (number);
  152.  property           power_loss               (number);
  153.  property           radiation_accum_factor   (number);
  154.  property           radiation_accum_limit    (number);
  155.  property           radiation_protection     (number);
  156.  property           radiation_restore_speed  (number);
  157.  property           schedule_max;
  158.  property           schedule_min;
  159.  property           se_object;
  160.  property           shock_protection         (number);
  161.  property           slot                     (number);
  162.  property           slots                    (object);
  163.  property           strike_protection        (number);
  164.  property           telepatic_protection     (number);
  165.  property           updated_times            (number);
  166.  property           wound_2_protection       (number);
  167.  property           wound_protection         (number);
  168.    
  169.     function Visual();
  170.     function _construct();
  171.     function net_Import(net_packet&);
  172.     function getVisible() const;
  173.     function net_Spawn(cse_abstract*);
  174.     function set_schedule(ISheduled*, number, number);
  175.     function load_config(string);
  176.     function test_server_flag(number) const;
  177.     function net_Export(net_packet&);
  178.     function getEnabled() const;
  179.     function use(CGameObject*);
  180. };
  181.  
  182. C++ class CArtefact : CInventoryItemObject { --// "новые" свойства артов
  183.  property           additional_inventory_weight(number); --// у нас в проекте не указывать, он бесполезен, я его вырезать хочу, влияет только на обездвиживающий перегруз, которого у нас нет
  184.  property           additional_inventory_weight2(number);
  185.  property           psy_health_restore_speed (number);
  186. };
  187.  
  188. C++ class CCustomOutfit : CInventoryItemObject { --// дополнил экспорт броников
  189.  property           artefact_count(number);
  190.  property           helmet_avaliable(boolean);
  191.  property           immunities;
  192. };
  193.  
  194. C++ class CStalkerOutfit : CCustomOutfit {
  195.  property           artefact_count(number);
  196.  property           helmet_avaliable(boolean);
  197.  property           immunities;
  198. };
  199.  
  200. C++ class hit {
  201.     const wound_2 = 9;
  202.     const physic_strike = 10;
  203. };
  204.  
  205. C++ CSE_Abstract : {
  206.  property           direction             (vector);
  207.  
  208.     set_custom_data(string);
  209.     set_name(string); --// если такое имя уже есть, то пропускает эту функцию, устанавливает обычное движковое имя и ругается в логе
  210. };
  211.  
  212. C++ class CSE_ALifeObject : CSE_Abstract {
  213.     use_ai_locations(boolean);
  214. };
  215.  
  216. C++ class CUIStatic : CUIWindow {
  217.     function InitTextureEx(string, string); --// создать текстуру с возможностью задания другого шейдера (по умолчанию hud/default)
  218.     --// с анимациями есть еще ЗП вариант, какой будет удобнее использовать, такой и сделаем, пока вывел ТЧ вариант
  219.     function SetColorAnimation(string, boolean, boolean, boolean, boolean); --// добавляет анимацию для статика (имя анимации, цикличность, альфа, установить анимацию на текст, установить анимацию на текстуру)
  220.     function SetColorAnimationDelay(float); --// время анимации
  221.     function ResetColorAnimation(); --// сбросить анимацию
  222.     function SetHintText(string); --// установить хинт (всплывающая подсказка, также работает для CUIButton и всех его дочек)
  223. };
  224.  
  225. C++ class CUIMainIngameWnd : CUIWindow {
  226.     function ShowZoneMap(boolean); --// показать/скрыть мини-карту со всеми дочками
  227. };
  228.  
  229. C++ class CUIListBox : CUIScrollView {
  230.     CUIListBox ();
  231.    
  232.     function SetWindowName(string);
  233.     function Enable(boolean);
  234.     function RemoveWindow(CUIWindow*);
  235.     function ScrollToBegin();
  236.     function GetMinScrollPos();
  237.     function AddWindow(CUIWindow*, boolean);
  238.     function GetWidth() const;
  239.     function Clear();
  240.     function DetachChild(CUIWindow*);
  241.     function SetPPMode();
  242.     function IsShown();
  243.     function Show(boolean);
  244.     function GetHeight() const;
  245.     function IsEnabled();
  246.     function ResetPPMode();
  247.     function GetWndPos(CUIWindow*);
  248.     function GetCurrentScrollPos();
  249.     function SetAutoDelete(boolean);
  250.     function AttachChild(CUIWindow*);
  251.     function AddTextItem(string);
  252.     function SetWndPos(vector2);
  253.     function ScrollToEnd();
  254.     function RemoveItem(CUIWindow*);
  255.     function GetMaxScrollPos();
  256.     function GetItemByIndex(number);
  257.     function WindowName();
  258.     function GetSelectedIndex();
  259.     function GetSelectedItem();
  260.     function SetWndRect(Frect);
  261.     function SetScrollPos(number);
  262.     function GetSize();
  263.     function RemoveAll();
  264.     function ShowSelectedItem(boolean);
  265.     function SetWndSize(vector2);
  266.     function GetItem(number);
  267.     function IsAutoDelete();
  268. };
  269.  
  270. C++ class CUIFrameWindow : CUIWindow {
  271.     function InitTexture(string);
  272. };
  273.  
  274. C++ class CDialogHolder {
  275.     function GetDialogToRender(CUIWindow*);
  276. };
  277.    
  278. C++ class CUIGameCustom {
  279.     function GetDialogToRender(CUIWindow*);
  280. };
  281.    
  282. C++ class CUITrackBarScript : CUIWindow { --// мне пришлось писать новый класс (позже накручу плюшек на него), так как CUITrackBar тесно связан с опциями, и при работе с ним начинаются жуткие баги из-за кривой реализации сохранения, этот класс я специально сделал для создания баров через скрипты, работает изолированно и наследуется только от CUIWindow, в дальнейшем скорее всего оптимизирую наследование, и "опциональный" трекбар унаследую от этого класса
  283.     function SetCheck(boolean); --// устанавливает значение при true в максимум, при false в минимум, пока работает только с integer(!) TODO:
  284.     function GetCheck(); --// есть-ли текущее значение? пока проверяет только integer(!) TODO:
  285.     function IsChanged(); --// значение изменилось?
  286.     function SetStep(number); --// устанавливает шаг трекинга
  287.     function GetStep(); --// получает шаг трекинга
  288.     function GetValue(); --// текущее значение
  289.     function SetValue(number); --// установить значение (так же меняется позиция ползунка в зависимости от значения)
  290.     function GetBackupValue(); --// получить предыдущее значение
  291.     function SetBackupValue(number); --// установить предыдущее значение
  292.     function GetBtn(); --// получить кнопку в виде объекта CUI3Button (временное решение, далее сделаю корректную кастомизацию графики)
  293.     function GetFrame(); --// получить первый фрейм в виде объекта CUIFrameLineWnd (временное решение, далее сделаю корректную кастомизацию графики)
  294.     function GetFrameD(); --// получить второй фрейм в виде объекта CUIFrameLineWnd (временное решение, далее сделаю корректную кастомизацию графики)
  295. };
  296.  
  297. C++ class SGameTaskObjective {
  298.     function set_real_description(string); --// установить статик дескрипшн
  299. };
  300.  
  301. C++ class CGameTask {
  302.     function set_description(string); --// установить статик дескрипшн
  303.     function get_description(); --// получить статик дескрипшн
  304. };
  305.  
  306. End of list of the classes exported to LUA
  307.  
  308. List of the namespaces exported to LUA
  309.  
  310.  namespace  {
  311.       function bit_left(number, number);
  312.       function bit_right(number, number);
  313.  
  314.  namespace game {
  315.       function set_user_time(number); --// создать объект времени по заданному времени
  316.       function get_user_time(CTime*); --// вернуть время созданного объекта времени
  317.     };
  318.  
  319.  namespace level {
  320.        --// WARNING!!! тут надо следить за тем что-бы айди не пересекались, айди создается генератором точно также как-будто спавним новый предмет, возвращает айди или можно ловить в коллбеке
  321.       function map_add_position_spot_ser(const vector&, string, string, string); --// добавить метку на карту по позиции (возвращает айди метки), объект не создается
  322.       function map_highlight_spot(number, string, string);--// закрасить метку цветом, третий параметр - цвет в формате "r,g,b,a" без пробелов
  323.       function map_get_spot_hint(number, string);
  324.       function object_by_name(string); --// не рекомендуется часто использовать как и object_by_id
  325.       function iterate_objects(function<void>); --// ну очень полезная функция для тех кто понимает ;) в функцию падает он самый
  326.       function get_talker(); --// скриптовый объект собеседника, активен только пока говорим, последнего собеседника можно выловить в коллбеке (специально для этого и переделал)
  327.     };
  328.  
  329.  namespace relation_registry {
  330.         function community_relation(string, string); --// см. lua_helper.lua
  331.         function set_community_relation(string, string, number);
  332.         function get_general_goodwill_between(number, number);
  333.     };
  334.  
  335.  namespace string_table { --// для ingame доступа к строкам
  336.       function add_string(string, string); --// добавить строку с указанным айди
  337.       function delete_string(string); --// удалить строку
  338.       function has_string(string); --// проверка на существование строки с указанным айди (Karlan->ALL: тут можно дополнительно компарить значение, если надо, то сделаю)
  339.       function reload_strings(); --// перезагрузить строки
  340.       function replace_string(string, string); --// заменить строку с указанным айди
  341.     };
  342.  };
  343.  
  344. End of list of the namespaces exported to LUA
  345.  
  346. --//-----------------------------------------------------------------------------------------------------
  347. --[[
  348. Что сделано помимо явно экспортированных нововведений, но, тем не менее, прямо влияет на игру:
  349.  
  350. - сделал кастомизацию дождя (помогает избавится от бага дальности отрисовки дождя, фпс не страдает) (см. rain.ltx)
  351. - подправлен дефайн R1_EXCLUDE (вырезана опция статики)
  352. - fix для спавна аномалий с m_artefact_spawn_count = 0
  353. - сделал звуки при включении и выключении фонарика (см. torch.ltx), звуки сделал и прогнал через СДК
  354. - поменял функцию чтения имени и дескрипшена итемов, теперь читается без кавычек, так что можно оформлять прямо в конфиге в стиле как будто xml
  355. - добавил параметр heading_angle для мапспотов, позволяет поворачивать метку на заданный угол
  356. - фикс зума карты, когда при большом отдалении пропадали все метки
  357. - починил параметр satiety_critical, теперь критическая сытость реально будет работать
  358. - починил инфопоршни пда (теперь выдаются верно, в файле прокомментировал, но все равно надо писать обвязку, возможно позже доделаю прямо в движке)
  359. - добавил тег location_level для метки, позволяет задавать приоритет метки и без багов реализовать пометку местностей как в ЗП
  360. - добавил систему бустеров как в ЗП
  361. - добавил подсветку слотов и драг-дропа как в ЗП
  362. - переделал пояс для артефактов, работает как в ЗП в зависимости от ключа artefact_count в костюмах
  363. - добавил новую систему индикаторов, текстуры пока взял из ЗП
  364. - добавлены шлемы со всеми вытекающими (аналогия ЗП, но некоторая часть кода переписана)
  365. - дополнение для II_DOC, теперь в ключе document_info можно писать информацию которую получит персонаж при обретении предмета
  366. - зафиксил зум у оружия и бинокля, исправление ошибок и убрал стартовый максимальный зум, теперь стартовый - минимальный
  367. - переделан condition_progress_bar, ранее был вообще отключен, так как в 188 ревизии был слишком криво сделан, сейчас все работает как нужно
  368. - добавил кастом-статик предупреждающий о том, что заканчивается виртуальная память
  369. - добавил выделение живых объектов рамками как в бинокле для CWeaponMagazined и это также отдельно можно задавать в самих прицелах, также сделал сохранение зума
  370. - фикс расчета различной статистики во вкладке пда "Статистика"
  371. - добавил систему рюкзаков и объемы для рюкзаков и боксов (см. backpacks.ltx, inventory_boxes.ltx)
  372. - добавил горячие клавиши в окно обыска трупов и ящиков, теперь по LSHIFT происходит перемещение итемов одной секции из одного объекта в другой, по X перемещение всех объектов ("Взять все")
  373. - теперь качество еды (насыщение) зависит от ее состояния (ключ cond_dec, по умолчанию ноль - не тухнет вообще), если совсем протухла, то вообще не насытитесь ни на сколько
  374. - оптимизировал калькуляции инвентаря, фактически ощущается реальный прирост к скорости работы гуя
  375. - пофиксил <money infinitive=...>, теперь он нормально работает, и при указании этого ключа можно продать стафф абсолютно на любую сумму вне зависимости от min/max
  376. - переделан eat_cond_dec на cond_dec, теперь ключ работает для всех итемов, вроде как потенциальная порча, было необходимо, так как некоторые итемы которые надо портить - не еда
  377. - для еды сделал рандомное установление состояния в теге supplies, теперь берется от 0.0 до cond при наличии cond_dec, в нашем случае избавляет от дополнительного скриптового костыля
  378. - сделал статик описания задания (CGameTask) и подзадания (SGameTaskObjective) (см. пример в <game_task id="esc_flash_task"...>), держите TAB на основном окне и смотрите как оно
  379. - скорость передвжиения зависит от загруженности ГГ, чем больше на себе несет тем медленее передвигается/прыгает, коэффициент потом обвяжу в конфиге актора и в бустерах, по выносливости еще есть предложение сделать накопленную усталость которую связать со сном и отдыхом, тоже просто делается, вопрос надобности и самой идеи (todo: попросить написать диздок)
  380. - переписан расчет сытости, теперь еще зависит от передвжения, чем активнее двигаемся, тем быстрее настанет голод (todo: привязать к массе и сделать кастомизацию), от спринта очень сильно убавляется сытость, при критической сытости у нас есть чуть больше 15 минут реального времени что-бы найти что-то съедобное, иначе смерть
  381. - фиксы джампинга (в оригинале мог прыгать при истощении и т.п.), почва для спецфункций мувемента (с ними получится более проработанная система каждого типа передвижения), их буду делать если будут по документу, пока ожидаю диздок по кондишнам
  382. - добавил код в движок, чтобы торговля видела рюкзаки и не давала родить тупые неприятные случаи для игрока
  383. - исправил вывод информации о всякой скорострельности для аддонов, теперь если в секции встречается wpn_addon, то инфа не покажется
  384. - добавил дабл прогресс бар и переписал окно информации об оружии, переделал прогресс бары на дабл прогресс бары, сделал емкость и список которые патроны подходят (опирался на ЗП, но там список боеприпасов криво сделан), пишется только первый, а иконки только к первому и второму, а ведь их может быть даже не пять
  385. - написал новый класс CUITrackBarScript, который предназначен специально для скриптов, оригинальный не в состоянии работать отдельно от меню (иначе меню начинает сильно баговать)
  386. - диалоги теперь не кешируются, а загружаются каждый раз при обращении к ним (позволяет перестраивать графы диалогов по ходу игры), так же динамические диалоги будут создаваться каждый раз по разному, ранее скриптовые диалоги оседали в памяти навечно, и после первого построения рандомного графа далее о рандоме речи быть не могло, даже после перезапуска программы
  387. - теперь можно вешать несколько секций прицелов на один ствол, если все будет нормально включу и для остального
  388. - переписал класс CUIButtonHint, получился достаточно функциональный, расчет позиции переписал не от окна, а от фрейма, так гораздо вернее, далее есть мысли сделать дочерний класс с богатой кастомизацией, чтобы в хинте можно было выводить все элементы
  389. - добавил для артефактов psy_health_restore_speed, additional_weight, additional_weight2 (последние два пока не дописал в окно описания, так как планирую его полностью переписать на нормальный вариант без потяжек текстур)
  390. - добавил флаг ph_skeleton_collision_enabled в секцию объекта, который поволит сохранить коллизию после смерти
  391. - в лампы и дестрой объекты добросил тип и айди оружия в хит-коллбек, у других надо тоже будет, но как-нибудь в другой раз
  392. - подкуртил плоть, а то заколебали тикать постоянно, также надо будет остальных подкрутить, а то тоже тикают, один раз 4 кабана убежали когда я в куртке с разряженной СВД был
  393. - переписал окно описания артефактов, теперь статики отображаются корректно, без растяжек
  394. - добавил hit_callback для CCar и CHelicopter
  395. - монстров можно обыскивать только если в руках нож, и он не тупой
  396. ]]--
  397. --//-----------------------------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement