Активный
- Тема Автор
- #1
Streamer позволяет создавать тысячи объектов без лагов. Разберем использование.
Установка
1. Скачайте streamer.dll
2. Поместите в папку plugins
3. Добавьте в server.cfg: plugins streamer
Подключение
Создание объектов
Параметры:
- worldid - виртуальный мир (-1 для всех)
- interiorid - интерьер (-1 для всех)
- playerid - игрок (-1 для всех)
- streamdistance - дистанция стрима
- drawdistance - дистанция прорисовки
Пример создания объектов
Управление объектами
Колбэки
3D Text Labels
Пикапы
Checkpoints
Race Checkpoints
Настройка стриминга
Важные моменты:
- Используйте правильные дистанции стрима
- Обновляйте стрим при телепортации
- Оптимизируйте количество объектов
- Используйте виртуальные миры для изоляции
Streamer позволяет создавать масштабные проекты!
Установка
1. Скачайте streamer.dll
2. Поместите в папку plugins
3. Добавьте в server.cfg: plugins streamer
Подключение
Код:
#include <streamer>
Создание объектов
Код:
// Стандартный способ (ограничение 1000 объектов)
CreateObject(modelid, x, y, z, rx, ry, rz);
// Streamer способ (тысячи объектов)
CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_OBJECT_SD, Float:drawdistance = STREAMER_OBJECT_DD);
Параметры:
- worldid - виртуальный мир (-1 для всех)
- interiorid - интерьер (-1 для всех)
- playerid - игрок (-1 для всех)
- streamdistance - дистанция стрима
- drawdistance - дистанция прорисовки
Пример создания объектов
Код:
public OnGameModeInit()
{
// Создание множества объектов
for(new i = 0; i < 5000; i++)
{
CreateDynamicObject(19379,
floatrandom(-2000.0, 2000.0),
floatrandom(-2000.0, 2000.0),
floatrandom(0.0, 50.0),
0.0, 0.0, 0.0,
-1, -1, -1,
300.0, 300.0);
}
return 1;
}
Управление объектами
Код:
// Перемещение
MoveDynamicObject(objectid, Float:x, Float:y, Float:z, Float:speed);
// Поворот
RotateDynamicObject(objectid, Float:rx, Float:ry, Float:rz, Float:speed);
// Установка позиции
SetDynamicObjectPos(objectid, Float:x, Float:y, Float:z);
// Установка поворота
SetDynamicObjectRot(objectid, Float:rx, Float:ry, Float:rz);
// Удаление
DestroyDynamicObject(objectid);
Колбэки
Код:
public OnDynamicObjectMoved(STREAMER_TAG_OBJECT:objectid)
{
// Объект завершил движение
return 1;
}
public OnPlayerEditDynamicObject(playerid, STREAMER_TAG_OBJECT:objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
// Игрок отредактировал объект
return 1;
}
public OnPlayerSelectDynamicObject(playerid, STREAMER_TAG_OBJECT:objectid, modelid, Float:x, Float:y, Float:z)
{
// Игрок выбрал объект
return 1;
}
3D Text Labels
Код:
CreateDynamic3DTextLabel(text[], color, Float:x, Float:y, Float:z, Float:drawdistance, attachedplayer = INVALID_PLAYER_ID, attachedvehicle = INVALID_VEHICLE_ID, testlos = 0, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_3D_TEXT_LABEL_SD);
// Пример
new Text3D:label = CreateDynamic3DTextLabel("Текст", 0xFFFFFFFF, 0.0, 0.0, 3.0, 20.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 100.0);
// Обновление
UpdateDynamic3DTextLabelText(STREAMER_TAG_3D_TEXT_LABEL:id, color, text[]);
// Удаление
DestroyDynamic3DTextLabel(STREAMER_TAG_3D_TEXT_LABEL:id);
Пикапы
Код:
CreateDynamicPickup(modelid, type, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_PICKUP_SD);
// Пример
new pickupid = CreateDynamicPickup(1274, 1, 0.0, 0.0, 3.0, -1, -1, -1, 200.0);
// Колбэк
public OnPlayerPickUpDynamicPickup(playerid, pickupid)
{
// Обработка подбора
return 1;
}
// Удаление
DestroyDynamicPickup(pickupid);
Checkpoints
Код:
CreateDynamicCP(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_CP_SD);
// Колбэки
public OnPlayerEnterDynamicCP(playerid, checkpointid)
{
// Игрок вошел в чекпоинт
return 1;
}
public OnPlayerLeaveDynamicCP(playerid, checkpointid)
{
// Игрок вышел из чекпоинта
return 1;
}
Race Checkpoints
Код:
CreateDynamicRaceCP(type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_RACE_CP_SD);
// Колбэки
public OnPlayerEnterDynamicRaceCP(playerid, checkpointid)
{
// Игрок проехал чекпоинт
return 1;
}
public OnPlayerLeaveDynamicRaceCP(playerid, checkpointid)
{
// Игрок покинул чекпоинт
return 1;
}
Настройка стриминга
Код:
// Установка дистанции стрима для всех объектов
Streamer_SetVisibleItems(STREAMER_TYPE_OBJECT, 500);
// Обновление стрима для игрока
Streamer_Update(playerid);
// Обновление стрима для всех
Streamer_UpdateEx(playerid, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1);
Важные моменты:
- Используйте правильные дистанции стрима
- Обновляйте стрим при телепортации
- Оптимизируйте количество объектов
- Используйте виртуальные миры для изоляции
Streamer позволяет создавать масштабные проекты!