kusehsup

Untitled

Nov 19th, 2025
632
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 19.60 KB | None | 0 0
  1. // ==================== РЕАЛИЗАЦИЯ СИСТЕМЫ СЦЕН ====================
  2.  
  3. // Создание сцены
  4. stock EventEngine:CreateScene(event_id, const name[], task_min, task_max, flags)
  5. {
  6.     if (g_EventEngine_SceneCount >= MAX_SCENES)
  7.     {
  8.         printf("[EventEngine] Ошибка: Достигнут лимит сцен (%d)", MAX_SCENES);
  9.         return EVENT_INVALID_VALUE;
  10.     }
  11.    
  12.     new scene_id = g_EventEngine_SceneCount;
  13.    
  14.     g_EventEngine_Scenes[scene_id][E_SCENE_ID] = scene_id;
  15.     g_EventEngine_Scenes[scene_id][E_SCENE_EVENT_ID] = event_id;
  16.     format(g_EventEngine_Scenes[scene_id][E_SCENE_NAME], 32, name);
  17.     g_EventEngine_Scenes[scene_id][E_SCENE_TASK_MIN] = task_min;
  18.     g_EventEngine_Scenes[scene_id][E_SCENE_TASK_MAX] = task_max;
  19.     g_EventEngine_Scenes[scene_id][E_SCENE_FLAGS] = flags;
  20.     g_EventEngine_Scenes[scene_id][E_SCENE_ENTITY_COUNT] = 0;
  21.     g_EventEngine_Scenes[scene_id][E_SCENE_ZONE_ID] = EVENT_INVALID_VALUE;
  22.     g_EventEngine_Scenes[scene_id][E_SCENE_ACTIVE] = false;
  23.    
  24.     g_EventEngine_SceneCount++;
  25.    
  26.     printf("[EventEngine] Создана сцена '%s' (ID: %d, Задания: %d-%d)", name, scene_id, task_min, task_max);
  27.     return scene_id;
  28. }
  29.  
  30. // Добавление сущности в сцену
  31. stock EventEngine:AddSceneEntity(scene_id, E_SCENE_ENTITY_TYPE:type, Float:x, Float:y, Float:z, ...)
  32. {
  33.     if (scene_id < 0 || scene_id >= g_EventEngine_SceneCount)
  34.         return false;
  35.        
  36.     if (g_EventEngine_Scenes[scene_id][E_SCENE_ENTITY_COUNT] >= MAX_SCENE_ENTITIES)
  37.     {
  38.         printf("[EventEngine] Ошибка: Достигнут лимит сущностей в сцене %d", scene_id);
  39.         return false;
  40.     }
  41.    
  42.     new entity_index = g_EventEngine_Scenes[scene_id][E_SCENE_ENTITY_COUNT];
  43.     new entity[E_SCENE_ENTITY];
  44.    
  45.     entity[E_ENTITY_TYPE] = _:type;
  46.     entity[E_ENTITY_ID] = EVENT_INVALID_VALUE; // Будет установлен при активации
  47.     entity[E_ENTITY_X] = x;
  48.     entity[E_ENTITY_Y] = y;
  49.     entity[E_ENTITY_Z] = z;
  50.    
  51.     // Обработка дополнительных параметров в зависимости от типа
  52.     switch (type)
  53.     {
  54.         case SCENE_ENTITY_OBJECT:
  55.         {
  56.             entity[E_ENTITY_REFERENCE] = getarg(3); // modelid
  57.             entity[E_ENTITY_RX] = Float:getarg(4);
  58.             entity[E_ENTITY_RY] = Float:getarg(5);
  59.             entity[E_ENTITY_RZ] = Float:getarg(6);
  60.         }
  61.        
  62.         case SCENE_ENTITY_VEHICLE:
  63.         {
  64.             entity[E_ENTITY_REFERENCE] = getarg(3); // modelid
  65.             entity[E_ENTITY_RZ] = Float:getarg(4); // rotation
  66.         }
  67.        
  68.         case SCENE_ENTITY_NPC, SCENE_ENTITY_ACTOR:
  69.         {
  70.             entity[E_ENTITY_REFERENCE] = getarg(3); // skin/model
  71.             entity[E_ENTITY_RZ] = Float:getarg(4); // rotation
  72.         }
  73.        
  74.         case SCENE_ENTITY_SOUND:
  75.         {
  76.             entity[E_ENTITY_REFERENCE] = getarg(3); // sound name (через хэш)
  77.             entity[E_ENTITY_RADIUS] = Float:getarg(4); // радиус звука
  78.         }
  79.        
  80.         case SCENE_ENTITY_WEATHER:
  81.         {
  82.             entity[E_ENTITY_REFERENCE] = getarg(3); // weather id
  83.         }
  84.        
  85.         case SCENE_ENTITY_TIME:
  86.         {
  87.             entity[E_ENTITY_REFERENCE] = getarg(3); // hour
  88.             entity[E_ENTITY_EXTRA_1] = getarg(4); // minute
  89.         }
  90.        
  91.         case SCENE_ENTITY_ZONE:
  92.         {
  93.             entity[E_ENTITY_RADIUS] = Float:getarg(3); // радиус зоны
  94.         }
  95.     }
  96.    
  97.     // Копируем сущность в сцену
  98.     g_EventEngine_Scenes[scene_id][E_SCENE_ENTITIES][entity_index] = entity;
  99.     g_EventEngine_Scenes[scene_id][E_SCENE_ENTITY_COUNT]++;
  100.    
  101.     printf("[EventEngine] Добавлена сущность типа %d в сцену %d", _:type, scene_id);
  102.     return true;
  103. }
  104.  
  105. // Активация сцены для игрока
  106. stock EventEngine:ActivatePlayerScene(playerid, scene_id)
  107. {
  108.     if (scene_id < 0 || scene_id >= g_EventEngine_SceneCount)
  109.         return false;
  110.        
  111.     if (g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT] >= MAX_PLAYER_SCENES)
  112.     {
  113.         printf("[EventEngine] Ошибка: У игрока %d достигнут лимит активных сцен", playerid);
  114.         return false;
  115.     }
  116.    
  117.     // Проверяем, не активирована ли уже сцена
  118.     if (EventEngine:IsSceneActiveForPlayer(playerid, scene_id))
  119.         return true;
  120.    
  121.     new scene[E_SCENE_DATA];
  122.     scene = g_EventEngine_Scenes[scene_id];
  123.    
  124.     // Сохраняем исходные настройки игрока при первой активации сцены
  125.     if (g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT] == 0)
  126.     {
  127.         g_EventEngine_PlayerScenes[playerid][E_PLAYER_CURRENT_WEATHER] = GetPlayerWeather(playerid);
  128.         g_EventEngine_PlayerScenes[playerid][E_PLAYER_CURRENT_TIME] = GetPlayerTime(playerid);
  129.         g_EventEngine_PlayerScenes[playerid][E_PLAYER_CURRENT_INTERIOR] = GetPlayerInterior(playerid);
  130.         g_EventEngine_PlayerScenes[playerid][E_PLAYER_CURRENT_WORLD] = GetPlayerVirtualWorld(playerid);
  131.     }
  132.    
  133.     // Создаем сущности сцены
  134.     for (new i = 0; i < scene[E_SCENE_ENTITY_COUNT]; i++)
  135.     {
  136.         new entity[E_SCENE_ENTITY] = scene[E_SCENE_ENTITIES][i];
  137.        
  138.         switch (E_SCENE_ENTITY_TYPE:entity[E_ENTITY_TYPE])
  139.         {
  140.             case SCENE_ENTITY_OBJECT:
  141.             {
  142.                 new object_id = CreateDynamicObject(
  143.                     entity[E_ENTITY_REFERENCE],
  144.                     entity[E_ENTITY_X], entity[E_ENTITY_Y], entity[E_ENTITY_Z],
  145.                     entity[E_ENTITY_RX], entity[E_ENTITY_RY], entity[E_ENTITY_RZ],
  146.                     .worldid = playerid, // Индивидуальный мир для игрока
  147.                     .interiorid = GetPlayerInterior(playerid)
  148.                 );
  149.                 entity[E_ENTITY_ID] = object_id;
  150.             }
  151.            
  152.             case SCENE_ENTITY_VEHICLE:
  153.             {
  154.                 new vehicle_id = CreateVehicle(
  155.                     entity[E_ENTITY_REFERENCE],
  156.                     entity[E_ENTITY_X], entity[E_ENTITY_Y], entity[E_ENTITY_Z],
  157.                     entity[E_ENTITY_RZ],
  158.                     -1, -1, -1, 0 // Прозрачные цвета
  159.                 );
  160.                 SetVehicleVirtualWorld(vehicle_id, playerid + 1000); // Индивидуальный виртуальный мир
  161.                 entity[E_ENTITY_ID] = vehicle_id;
  162.             }
  163.            
  164.             case SCENE_ENTITY_NPC:
  165.             {
  166.                 // Создание NPC в индивидуальном мире
  167.                 new npc_id = NPC_Create(
  168.                     entity[E_ENTITY_REFERENCE],
  169.                     entity[E_ENTITY_X], entity[E_ENTITY_Y], entity[E_ENTITY_Z],
  170.                     entity[E_ENTITY_RZ],
  171.                     .worldid = playerid + 1000
  172.                 );
  173.                 entity[E_ENTITY_ID] = npc_id;
  174.             }
  175.            
  176.             case SCENE_ENTITY_SOUND:
  177.             {
  178.                 // Воспроизведение 3D звука
  179.                 Sound:Play3D(
  180.                     entity[E_ENTITY_REFERENCE], // Имя звукового файла
  181.                     entity[E_ENTITY_X], entity[E_ENTITY_Y], entity[E_ENTITY_Z],
  182.                     .min_distance = 5.0,
  183.                     .max_distance = entity[E_ENTITY_RADIUS],
  184.                     .initiator_system = SOUND_SYSTEM_EVENT_SCENE
  185.                 );
  186.             }
  187.            
  188.             case SCENE_ENTITY_WEATHER:
  189.             {
  190.                 SetPlayerWeather(playerid, entity[E_ENTITY_REFERENCE]);
  191.             }
  192.            
  193.             case SCENE_ENTITY_TIME:
  194.             {
  195.                 SetPlayerTime(playerid, entity[E_ENTITY_REFERENCE], entity[E_ENTITY_EXTRA_1]);
  196.             }
  197.            
  198.             case SCENE_ENTITY_INTERIOR:
  199.             {
  200.                 SetPlayerInterior(playerid, entity[E_ENTITY_REFERENCE]);
  201.             }
  202.         }
  203.        
  204.         // Сохраняем обновленную сущность
  205.         g_EventEngine_Scenes[scene_id][E_SCENE_ENTITIES][i] = entity;
  206.     }
  207.    
  208.     // Добавляем сцену в список активных сцен игрока
  209.     g_EventEngine_PlayerScenes[playerid][E_PLAYER_ACTIVE_SCENES][g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT]] = scene_id;
  210.     g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT]++;
  211.    
  212.     g_EventEngine_Scenes[scene_id][E_SCENE_ACTIVE] = true;
  213.    
  214.     // Вызываем callback активации
  215.     if (funcidx("OnPlayerSceneActivate") != -1)
  216.     {
  217.         CallLocalFunction("OnPlayerSceneActivate", "ii", playerid, scene_id);
  218.     }
  219.    
  220.     printf("[EventEngine] Активирована сцена %d для игрока %d", scene_id, playerid);
  221.     return true;
  222. }
  223.  
  224. // Деактивация сцены для игрока
  225. stock EventEngine:DeactivatePlayerScene(playerid, scene_id)
  226. {
  227.     if (!EventEngine:IsSceneActiveForPlayer(playerid, scene_id))
  228.         return true;
  229.        
  230.     new scene[E_SCENE_DATA];
  231.     scene = g_EventEngine_Scenes[scene_id];
  232.    
  233.     // Удаляем сущности сцены
  234.     for (new i = 0; i < scene[E_SCENE_ENTITY_COUNT]; i++)
  235.     {
  236.         new entity[E_SCENE_ENTITY] = scene[E_SCENE_ENTITIES][i];
  237.        
  238.         switch (E_SCENE_ENTITY_TYPE:entity[E_ENTITY_TYPE])
  239.         {
  240.             case SCENE_ENTITY_OBJECT:
  241.             {
  242.                 if (entity[E_ENTITY_ID] != EVENT_INVALID_VALUE)
  243.                 {
  244.                     DestroyDynamicObject(entity[E_ENTITY_ID]);
  245.                 }
  246.             }
  247.            
  248.             case SCENE_ENTITY_VEHICLE:
  249.             {
  250.                 if (entity[E_ENTITY_ID] != EVENT_INVALID_VALUE)
  251.                 {
  252.                     DestroyVehicle(entity[E_ENTITY_ID]);
  253.                 }
  254.             }
  255.            
  256.             case SCENE_ENTITY_NPC:
  257.             {
  258.                 if (entity[E_ENTITY_ID] != EVENT_INVALID_VALUE)
  259.                 {
  260.                     NPC_Destroy(entity[E_ENTITY_ID]);
  261.                 }
  262.             }
  263.            
  264.             case SCENE_ENTITY_SOUND:
  265.             {
  266.                 Sound:Stop3D(entity[E_ENTITY_REFERENCE], entity[E_ENTITY_X], entity[E_ENTITY_Y], entity[E_ENTITY_Z]);
  267.             }
  268.            
  269.             case SCENE_ENTITY_WEATHER:
  270.             {
  271.                 // Восстанавливаем исходную погоду при удалении последней сцены
  272.                 if (g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT] == 1)
  273.                 {
  274.                     SetPlayerWeather(playerid, g_EventEngine_PlayerScenes[playerid][E_PLAYER_CURRENT_WEATHER]);
  275.                 }
  276.             }
  277.            
  278.             case SCENE_ENTITY_TIME:
  279.             {
  280.                 if (g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT] == 1)
  281.                 {
  282.                     ResetPlayerTime(playerid);
  283.                 }
  284.             }
  285.         }
  286.        
  287.         // Сбрасываем ID сущности
  288.         entity[E_ENTITY_ID] = EVENT_INVALID_VALUE;
  289.         g_EventEngine_Scenes[scene_id][E_SCENE_ENTITIES][i] = entity;
  290.     }
  291.    
  292.     // Удаляем сцену из списка активных
  293.     for (new i = 0; i < g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT]; i++)
  294.     {
  295.         if (g_EventEngine_PlayerScenes[playerid][E_PLAYER_ACTIVE_SCENES][i] == scene_id)
  296.         {
  297.             // Сдвигаем остальные сцены
  298.             for (new j = i; j < g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT] - 1; j++)
  299.             {
  300.                 g_EventEngine_PlayerScenes[playerid][E_PLAYER_ACTIVE_SCENES][j] =
  301.                     g_EventEngine_PlayerScenes[playerid][E_PLAYER_ACTIVE_SCENES][j + 1];
  302.             }
  303.             g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT]--;
  304.             break;
  305.         }
  306.     }
  307.    
  308.     g_EventEngine_Scenes[scene_id][E_SCENE_ACTIVE] = false;
  309.    
  310.     // Вызываем callback деактивации
  311.     if (funcidx("OnPlayerSceneDeactivate") != -1)
  312.     {
  313.         CallLocalFunction("OnPlayerSceneDeactivate", "ii", playerid, scene_id);
  314.     }
  315.    
  316.     printf("[EventEngine] Деактивирована сцена %d для игрока %d", scene_id, playerid);
  317.     return true;
  318. }
  319.  
  320. // Автоматическое обновление сцен при смене задания
  321. stock EventEngine:UpdatePlayerScenes(playerid, current_task)
  322. {
  323.     printf("[EventEngine] Обновление сцен для игрока %d (задание: %d)", playerid, current_task);
  324.    
  325.     // Деактивируем сцены, которые больше не подходят
  326.     for (new i = 0; i < g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT]; i++)
  327.     {
  328.         new scene_id = g_EventEngine_PlayerScenes[playerid][E_PLAYER_ACTIVE_SCENES][i];
  329.         new scene[E_SCENE_DATA] = g_EventEngine_Scenes[scene_id];
  330.        
  331.         if (current_task < scene[E_SCENE_TASK_MIN] || current_task > scene[E_SCENE_TASK_MAX])
  332.         {
  333.             if (scene[E_SCENE_FLAGS] & SCENE_FLAG_AUTO_DESTROY)
  334.             {
  335.                 EventEngine:DeactivatePlayerScene(playerid, scene_id);
  336.                 i--; // Уменьшаем счетчик т.к. массив сдвинулся
  337.             }
  338.         }
  339.     }
  340.    
  341.     // Активируем подходящие сцены
  342.     for (new scene_id = 0; scene_id < g_EventEngine_SceneCount; scene_id++)
  343.     {
  344.         new scene[E_SCENE_DATA] = g_EventEngine_Scenes[scene_id];
  345.        
  346.         // Проверяем, подходит ли сцена по заданию и мероприятию
  347.         if (scene[E_SCENE_EVENT_ID] == g_EventEngine_ActiveEvent &&
  348.             current_task >= scene[E_SCENE_TASK_MIN] &&
  349.             current_task <= scene[E_SCENE_TASK_MAX] &&
  350.             !EventEngine:IsSceneActiveForPlayer(playerid, scene_id))
  351.         {
  352.             EventEngine:ActivatePlayerScene(playerid, scene_id);
  353.         }
  354.     }
  355. }
  356.  
  357. // Проверка активности сцены для игрока
  358. stock EventEngine:IsSceneActiveForPlayer(playerid, scene_id)
  359. {
  360.     for (new i = 0; i < g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT]; i++)
  361.     {
  362.         if (g_EventEngine_PlayerScenes[playerid][E_PLAYER_ACTIVE_SCENES][i] == scene_id)
  363.             return true;
  364.     }
  365.     return false;
  366. }
  367.  
  368. // Уничтожение всех сцен игрока
  369. stock EventEngine:DestroyPlayerScenes(playerid, bool:keep_persistent = false)
  370. {
  371.     printf("[EventEngine] Уничтожение сцен для игрока %d (persistent: %d)", playerid, _:keep_persistent);
  372.    
  373.     for (new i = 0; i < g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT]; i++)
  374.     {
  375.         new scene_id = g_EventEngine_PlayerScenes[playerid][E_PLAYER_ACTIVE_SCENES][i];
  376.         new scene[E_SCENE_DATA] = g_EventEngine_Scenes[scene_id];
  377.        
  378.         if (keep_persistent && (scene[E_SCENE_FLAGS] & SCENE_FLAG_PERSISTENT))
  379.             continue;
  380.            
  381.         EventEngine:DeactivatePlayerScene(playerid, scene_id);
  382.         i--; // Уменьшаем счетчик т.к. массив сдвинулся
  383.     }
  384.    
  385.     // Восстанавливаем исходные настройки
  386.     if (g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT] == 0)
  387.     {
  388.         SetPlayerWeather(playerid, g_EventEngine_PlayerScenes[playerid][E_PLAYER_CURRENT_WEATHER]);
  389.         ResetPlayerTime(playerid);
  390.         SetPlayerInterior(playerid, g_EventEngine_PlayerScenes[playerid][E_PLAYER_CURRENT_INTERIOR]);
  391.         SetPlayerVirtualWorld(playerid, g_EventEngine_PlayerScenes[playerid][E_PLAYER_CURRENT_WORLD]);
  392.     }
  393. }
  394.  
  395. // Интеграция с системой заданий - обновляем при смене задания
  396. stock EventEngine:SetPlayerTask(playerid, task_id, bool:is_on_login = false)
  397. {
  398.     // ... существующий код смены задания ...
  399.    
  400.     // Обновляем сцены после смены задания
  401.     EventEngine:UpdatePlayerScenes(playerid, task_id);
  402.    
  403.     // ... остальной код ...
  404. }
  405.  
  406. // Обработка отключения игрока
  407. public OnPlayerDisconnect(playerid, reason)
  408. {
  409.     EventEngine:DestroyPlayerScenes(playerid, false);
  410.    
  411.     // ... остальной код ...
  412.     return 1;
  413. }
  414.  
  415. // Обработка выхода из зоны
  416. public OnPlayerLeaveDynamicArea(playerid, areaid)
  417. {
  418.     for (new i = 0; i < g_EventEngine_PlayerScenes[playerid][E_PLAYER_SCENE_COUNT]; i++)
  419.     {
  420.         new scene_id = g_EventEngine_PlayerScenes[playerid][E_PLAYER_ACTIVE_SCENES][i];
  421.         new scene[E_SCENE_DATA] = g_EventEngine_Scenes[scene_id];
  422.        
  423.         if ((scene[E_SCENE_FLAGS] & SCENE_FLAG_ZONE_BASED) && scene[E_SCENE_ZONE_ID] == areaid)
  424.         {
  425.             EventEngine:DeactivatePlayerScene(playerid, scene_id);
  426.             i--;
  427.         }
  428.     }
  429.    
  430.     return 1;
  431. }
  432.  
  433. // Пример создания сцены для задания "Поиск реквизита"
  434. public Circus_OnTaskInit(task_id)
  435. {
  436.     if (task_id == TASK_FIND_PROPS)
  437.     {
  438.         // Создаем сцену с реквизитом в цирке
  439.         new scene_id = EventEngine:CreateScene(
  440.             EVENT_CIRCUS,
  441.             "Реквизит цирка",
  442.             TASK_FIND_PROPS,
  443.             TASK_FIND_PROPS_FINISH,
  444.             SCENE_FLAG_AUTO_DESTROY
  445.         );
  446.        
  447.         // Добавляем объекты реквизита
  448.         EventEngine:AddSceneEntity(scene_id, SCENE_ENTITY_OBJECT,
  449.             35.8412, 1945.6732, 9.8203, 19315, 0.0, 0.0, 0.0); // Ящик с реквизитом
  450.        
  451.         EventEngine:AddSceneEntity(scene_id, SCENE_ENTITY_OBJECT,
  452.             33.1289, 1943.4512, 9.8203, 19632, 0.0, 0.0, 90.0); // Костюмы
  453.        
  454.         // Добавляем NPC охраны
  455.         EventEngine:AddSceneEntity(scene_id, SCENE_ENTITY_NPC,
  456.             37.2198, 1942.1289, 9.8203, 71, 180.0); // Охранник
  457.        
  458.         // Добавляем атмосферный звук
  459.         EventEngine:AddSceneEntity(scene_id, SCENE_ENTITY_SOUND,
  460.             35.0, 1945.0, 10.0, "circus/ambient/storage.mp3", 15.0);
  461.     }
  462. }
  463.  
  464. // Пример сцены с транспортом для задания доставки
  465. public Circus_OnPlayerStartTask(playerid, sub_task)
  466. {
  467.     new task_id = EventEngine:GetPlayerTask(playerid);
  468.    
  469.     if (task_id == TASK_DELIVER_PROPS)
  470.     {
  471.         // Создаем индивидуальный транспорт для доставки
  472.         new scene_id = EventEngine:CreateScene(
  473.             EVENT_CIRCUS,
  474.             "Транспорт доставки",
  475.             TASK_DELIVER_PROPS,
  476.             TASK_DELIVER_PROPS_FINISH,
  477.             SCENE_FLAG_AUTO_DESTROY
  478.         );
  479.        
  480.         // Добавляем фургон для доставки
  481.         EventEngine:AddSceneEntity(scene_id, SCENE_ENTITY_VEHICLE,
  482.             45.2198, 1950.1289, 10.1203, 498, 270.0); // Фургон Boxville
  483.        
  484.         // Устанавливаем погоду для атмосферы
  485.         EventEngine:AddSceneEntity(scene_id, SCENE_ENTITY_WEATHER,
  486.             0.0, 0.0, 0.0, 8); // Туманная погода
  487.        
  488.         // Устанавливаем вечернее время
  489.         EventEngine:AddSceneEntity(scene_id, SCENE_ENTITY_TIME,
  490.             0.0, 0.0, 0.0, 20, 0); // 20:00
  491.     }
  492. }
Advertisement
Add Comment
Please, Sign In to add comment