PDA

Просмотр полной версии : [Plugin] Стример v2.7.3



L0ndl3m
22.08.2014, 19:52
Стример Плагин v2.7.3

Стример предназначен для объектов, пикапов, чекпоинтов, гоночных чекпоинтов, иконок на карте, и 3D текстов.

Макросы


#define STREAMER_TYPE_OBJECT (0)
#define STREAMER_TYPE_PICKUP (1)
#define STREAMER_TYPE_CP (2)
#define STREAMER_TYPE_RACE_CP (3)
#define STREAMER_TYPE_MAP_ICON (4)
#define STREAMER_TYPE_3D_TEXT_LABEL (5)
#define STREAMER_TYPE_AREA (6)

#define STREAMER_AREA_TYPE_CIRCLE (0)
#define STREAMER_AREA_TYPE_CYLINDER (1)
#define STREAMER_AREA_TYPE_SPHERE (2)
#define STREAMER_AREA_TYPE_RECTANGLE (3)
#define STREAMER_AREA_TYPE_CUBOID (4)
#define STREAMER_AREA_TYPE_POLYGON (5)

#define STREAMER_OBJECT_TYPE_GLOBAL (0)
#define STREAMER_OBJECT_TYPE_PLAYER (1)
#define STREAMER_OBJECT_TYPE_DYNAMIC (2)


Энумератор


enum
{
E_STREAMER_ATTACHED_OBJECT,
E_STREAMER_ATTACHED_PLAYER,
E_STREAMER_ATTACHED_VEHICLE,
E_STREAMER_ATTACH_OFFSET_X,
E_STREAMER_ATTACH_OFFSET_Y,
E_STREAMER_ATTACH_OFFSET_Z,
E_STREAMER_ATTACH_R_X,
E_STREAMER_ATTACH_R_Y,
E_STREAMER_ATTACH_R_Z,
E_STREAMER_ATTACH_X,
E_STREAMER_ATTACH_Y,
E_STREAMER_ATTACH_Z,
E_STREAMER_COLOR,
E_STREAMER_DRAW_DISTANCE,
E_STREAMER_EXTRA_ID,
E_STREAMER_INTERIOR_ID,
E_STREAMER_MAX_X,
E_STREAMER_MAX_Y,
E_STREAMER_MAX_Z,
E_STREAMER_MIN_X,
E_STREAMER_MIN_Y,
E_STREAMER_MIN_Z,
E_STREAMER_MODEL_ID,
E_STREAMER_MOVE_R_X,
E_STREAMER_MOVE_R_Y,
E_STREAMER_MOVE_R_Z,
E_STREAMER_MOVE_SPEED,
E_STREAMER_MOVE_X,
E_STREAMER_MOVE_Y,
E_STREAMER_MOVE_Z,
E_STREAMER_NEXT_X,
E_STREAMER_NEXT_Y,
E_STREAMER_NEXT_Z,
E_STREAMER_PLAYER_ID,
E_STREAMER_R_X,
E_STREAMER_R_Y,
E_STREAMER_R_Z,
E_STREAMER_SIZE,
E_STREAMER_STREAM_DISTANCE,
E_STREAMER_STYLE,
E_STREAMER_TEST_LOS,
E_STREAMER_TYPE,
E_STREAMER_WORLD_ID,
E_STREAMER_X,
E_STREAMER_Y,
E_STREAMER_Z
}


Родные функции

Настройки:


native Streamer_GetTickRate();
native Streamer_SetTickRate(rate);
native Streamer_GetMaxItems(type);
native Streamer_SetMaxItems(type, items);
native Streamer_GetVisibleItems(type);
native Streamer_SetVisibleItems(type, items);
native Streamer_GetCellDistance(&Float:distance);
native Streamer_SetCellDistance(Float:distance);
native Streamer_GetCellSize(&Float:size);
native Streamer_SetCellSize(Float:size);


Обновление:


native Streamer_ProcessActiveItems();
native Streamer_ToggleIdleUpdate(playerid, toggle);
native Streamer_ToggleItemUpdate(playerid, type, toggle);
native Streamer_Update(playerid);
native Streamer_UpdateEx(playerid, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1);


Изменение данных:


native Streamer_GetFloatData(type, {Text3D,_}:id, data, &Float:result);
native Streamer_SetFloatData(type, {Text3D,_}:id, data, Float:value);
native Streamer_GetIntData(type, {Text3D,_}:id, data);
native Streamer_SetIntData(type, {Text3D,_}:id, data, value);
native Streamer_GetArrayData(type, {Text3D,_}:id, data, dest[], maxdest = sizeof dest);
native Streamer_SetArrayData(type, {Text3D,_}:id, data, const src[], maxsrc = sizeof src);
native Streamer_IsInArrayData(type, {Text3D,_}:id, data, value);
native Streamer_AppendArrayData(type, {Text3D,_}:id, data, value);
native Streamer_RemoveArrayData(type, {Text3D,_}:id, data, value);
native Streamer_GetUpperBound(type);


Разное:


native Streamer_GetDistanceToItem(Float:x, Float:y, Float:z, type, {Text3D,_}:id, &Float:distance, dimensions = 3);
native Streamer_GetItemInternalID(playerid, type, {Text3D,_}:streamerid);
native Streamer_GetItemStreamerID(playerid, type, {Text3D,_}:internalid);
native Streamer_IsItemVisible(playerid, type, {Text3D,_}:id);
native Streamer_DestroyAllVisibleItems(playerid, type, serverwide = 1);
native Streamer_CountVisibleItems(playerid, type, serverwide = 1);
native Streamer_DestroyAllItems(type, serverwide = 1);
native Streamer_CountItems(type, serverwide = 1);


Объекты:


native CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 200.0, Float:drawdistance = 0.0);
native DestroyDynamicObject(objectid);
native IsValidDynamicObject(objectid);
native SetDynamicObjectPos(objectid, Float:x, Float:y, Float:z);
native GetDynamicObjectPos(objectid, &Float:x, &Float:y, &Float:z);
native SetDynamicObjectRot(objectid, Float:rx, Float:ry, Float:rz);
native GetDynamicObjectRot(objectid, &Float:rx, &Float:ry, &Float:rz);
native MoveDynamicObject(objectid, Float:x, Float:y, Float:z, Float:speed, Float:rx = -1000.0, Float:ry = -1000.0, Float:rz = -1000.0);
native StopDynamicObject(objectid);
native IsDynamicObjectMoving(objectid);
native AttachCameraToDynamicObject(playerid, objectid);
native AttachDynamicObjectToVehicle(objectid, vehicleid, Float:offsetx, Float:offsety, Float:offsetz, Float:rx, Float:ry, Float:rz);
native EditDynamicObject(playerid, objectid);
native GetDynamicObjectMaterial(objectid, materialindex, &modelid, txdname[], texturename[], &materialcolor, maxtxdname = sizeof txdname, maxtexturename = sizeof texturename);
native SetDynamicObjectMaterial(objectid, materialindex, modelid, const txdname[], const texturename[], materialcolor = 0);
native GetDynamicObjectMaterialText(objectid, materialindex, text[], &materialsize, fontface[], &fontsize, &bold, &fontcolor, &backcolor, &textalignment, maxtext = sizeof text, maxfontface = sizeof fontface);
native SetDynamicObjectMaterialText(objectid, materialindex, const text[], materialsize = OBJECT_MATERIAL_SIZE_256x128, const fontface[] = "Arial", fontsize = 24, bold = 1, fontcolor = 0xFFFFFFFF, backcolor = 0, textalignment = 0);


Пикапы:


native CreateDynamicPickup(modelid, type, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0);
native DestroyDynamicPickup(pickupid);
native IsValidDynamicPickup(pickupid);


Пикапы:


native CreateDynamicCP(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0);
native DestroyDynamicCP(checkpointid);
native IsValidDynamicCP(checkpointid);
native TogglePlayerDynamicCP(playerid, checkpointid, toggle);
native TogglePlayerAllDynamicCPs(playerid, toggle);
native IsPlayerInDynamicCP(playerid, checkpointid);
native GetPlayerVisibleDynamicCP(playerid);


Гоночные чекпоинты:


native CreateDynamicRaceCP(type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0);
native DestroyDynamicRaceCP(checkpointid);
native IsValidDynamicRaceCP(checkpointid);
native TogglePlayerDynamicRaceCP(playerid, checkpointid, toggle);
native TogglePlayerAllDynamicRaceCPs(playerid, toggle);
native IsPlayerInDynamicRaceCP(playerid, checkpointid);
native GetPlayerVisibleDynamicRaceCP(playerid);


Иконки на карте:


native CreateDynamicMapIcon(Float:x, Float:y, Float:z, type, color, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0, style = MAPICON_LOCAL);
native DestroyDynamicMapIcon(iconid);
native IsValidDynamicMapIcon(iconid);


3D тексты:


native Text3D:CreateDynamic3DTextLabel(const 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 = 100.0);
native DestroyDynamic3DTextLabel(Text3D:id);
native IsValidDynamic3DTextLabel(Text3D:id);
native GetDynamic3DTextLabelText(Text3D:id, text[], maxtext = sizeof text);
native UpdateDynamic3DTextLabelText(Text3D:id, color, const text[]);


Полигоны:


native CreateDynamicCircle(Float:x, Float:y, Float:size, worldid = -1, interiorid = -1, playerid = -1);
native CreateDynamicCylinder(Float:x, Float:y, Float:minz, Float:maxz, Float:size, worldid = -1, interiorid = -1, playerid = -1);
native CreateDynamicSphere(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1);
native CreateDynamicRectangle(Float:minx, Float:miny, Float:maxx, Float:maxy, worldid = -1, interiorid = -1, playerid = -1);
native CreateDynamicCuboid(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid = -1, interiorid = -1, playerid = -1);
native CreateDynamicPolygon(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1, playerid = -1);
native DestroyDynamicArea(areaid);
native IsValidDynamicArea(areaid);
native GetDynamicPolygonPoints(areaid, Float:points[], maxpoints = sizeof points);
native GetDynamicPolygonNumberPoints(areaid);
native TogglePlayerDynamicArea(playerid, areaid, toggle);
native TogglePlayerAllDynamicAreas(playerid, toggle);
native IsPlayerInDynamicArea(playerid, areaid, recheck = 0);
native IsPlayerInAnyDynamicArea(playerid, recheck = 0);
native IsAnyPlayerInDynamicArea(areaid, recheck = 0);
native IsAnyPlayerInAnyDynamicArea(recheck = 0);
native GetPlayerDynamicAreas(playerid, areas[], maxareas = sizeof areas);
native GetPlayerNumberDynamicAreas(playerid);
native IsPointInDynamicArea(areaid, Float:x, Float:y, Float:z);
native IsPointInAnyDynamicArea(Float:x, Float:y, Float:z);
native AttachDynamicAreaToObject(areaid, objectid, type = STREAMER_OBJECT_TYPE_DYNAMIC, playerid = INVALID_PLAYER_ID);
native AttachDynamicAreaToPlayer(areaid, playerid);
native AttachDynamicAreaToVehicle(areaid, vehicleid);


Полигоны:


native CreateDynamicObjectEx(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, Float:drawdistance = 0.0, Float:streamdistance = 200.0, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
native CreateDynamicPickupEx(modelid, type, Float:x, Float:y, Float:z, Float:streamdistance = 100.0, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
native CreateDynamicCPEx(Float:x, Float:y, Float:z, Float:size, Float:streamdistance = 100.0, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
native CreateDynamicRaceCPEx(type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size, Float:streamdistance = 100.0, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
native CreateDynamicMapIconEx(Float:x, Float:y, Float:z, type, color, style, Float:streamdistance = 100.0, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
native Text3D:CreateDynamic3DTextLabelEx(const text[], color, Float:x, Float:y, Float:z, Float:drawdistance, attachedplayer = INVALID_PLAYER_ID, attachedvehicle = INVALID_VEHICLE_ID, testlos = 0, Float:streamdistance = 100.0, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
native CreateDynamicCircleEx(Float:x, Float:y, Float:size, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
native CreateDynamicCylinderEx(Float:x, Float:y, Float:minz, Float:maxz, Float:size, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
native CreateDynamicSphereEx(Float:x, Float:y, Float:z, Float:size, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
native CreateDynamicRectangleEx(Float:minx, Float:miny, Float:maxx, Float:maxy, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
native CreateDynamicCuboidEx(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
native CreateDynamicPolygonEx(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);


Автовызываемые функции:


forward OnDynamicObjectMoved(objectid);
forward OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz);
forward OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z);
forward OnPlayerShootDynamicObject(playerid, weaponid, objectid, Float:x, Float:y, Float:z);
forward OnPlayerPickUpDynamicPickup(playerid, pickupid);
forward OnPlayerEnterDynamicCP(playerid, checkpointid);
forward OnPlayerLeaveDynamicCP(playerid, checkpointid);
forward OnPlayerEnterDynamicRaceCP(playerid, checkpointid);
forward OnPlayerLeaveDynamicRaceCP(playerid, checkpointid);
forward OnPlayerEnterDynamicArea(playerid, areaid);
forward OnPlayerLeaveDynamicArea(playerid, areaid);


Установка:

Файлы streamer.dll и streamer.so распакуйте в папку plugins ( вы можете положить один из них, .dll - для Windows, .so - для Linux ).

Открываем файл server.cfg находим строку plugins и подписываем напротив этой строки:
На хостинге ( linux ):

streamer.so
На локалке ( windows ):

streamer.dll

Файл streamer.inc распакуйте в папку pawno/include.

Открываем ваш мод, и после всех инклудов прописываем строку:

#include <streamer>

Если например, у вас было так:


#include <a_samp>
#include <sscanf2>
#include <dc_cmd>

То с подключенным плагином это будет выглядеть примерно так:


#include <a_samp>
#include <sscanf2>
#include <dc_cmd>
#include <streamer>


Обязательно перекомпилируйте ваш мод с новым плагином и инклюдом.

Общие замечания

По умолчанию, обновление плагина каждые: 50 мс.
По умолчанию, макс. кол-во предметов: нет ( бесконечно )
По умолчанию, кол-во видимых: Объектов ( 500 ), Пикапов ( 4096 ), 3D текстов ( 1024 )
Если вы используете число -1 в одном или нескольких параметров в функции, например это может быть: Виртуальный мир, интерьер, ID игрока, то все вещи будут отображены во всех виртуальные мирах, интерьерах, или всем игрокам
Время обновления плагина практически не зависит от работоспособности самого плагина, Если предметы отображаются медленно, снизьте время обновления плагина; если наоборот - повысьте.
Если некоторые предметы не появляютя, возможно их много на данной территории. Снизьте значение свойства "streamdistance" в настройках сервера ( server.cfg )
Не все типы предметов поддерживаются стримером
Максимально 1000 игроков, ( от 0 до 999, итого 1000 игроков ), могут взаимодействовать с плагином на сервере
Максимальное количество видимых объектов 999 начиная с SA-MP 0.3d, не рекомендуется все объекты располагать рядом с друг другом, из-за лимита SA:MP. По умолчанию, макс. количество видимых объектов в одном полигоне примерно до 500
Убедитесь, что все скрипты, которые относятся к моду, имеют последнюю версию инклюда стримера


Замечания по родным функциям

Используйте Streamer_UpdateEx чтобы подгрузить отображаемые предметы игроку при выборе класса игрока ( OnPlayerRequestClass ).
Виртуальные миры, интерьеры, и информация о игроке могут быть изменены через функции управления значений, такие функции как : Streamer_GetArrayData, Streamer_SetArrayData, для примера.
Вот пример изменения модели объекта:

Streamer_SetIntData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_MODEL_ID, 1225);
Пример изменения виртуального мира, интерьера...:

Streamer_AppendArrayData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_PLAYER_ID, playerid);
Для регулировки расстояния прорисовки объекта ( добавлено в SA:MP 0.3b ) используйте Streamer_SetFloatData с E_STREAMER_DRAW_DISTANCE. Также, можно использовать CreateDynamicObject(Ex). Объект по умолчанию будет иметь прорисовку: 0.0
Для регулирования стиля иконки карты ( добавлено в SA:MP 0.3c ), используйте Streamer_SetIntData с E_STREAMER_STYLE. Также, можно использовать CreateDynamicMapIcon(Ex). Правильные стили иконок от 0 до 3, по умолчанию стиль иконки равен нулю ( 0 ).


Замечания по работоспособности

Не рекомендуется использовать большое расстояние прорисовки объектов. Это может существенно повлиять, потому что при большом количестве предметов и при большом значении прорисовки они не успеют прогрузиться в течении этого времени. Используйте большое расстояние прорисовки например для иконок на карте
Добавление нескольких виртуальных миров и интерьеров, может привести к увеличению используемой памяти и снижению работоспособности. Значение -1 ( всех миров и интерьер ) буквально обеспечивает лучшую производительность, так как такие объекты при следующем обновлении практически не проверяются


Загрузка
Последние скомпилированные бинарники будут всегда здесь:

Страница релизов на GitHub (https://github.com/samp-incognito/samp-streamer-plugin/releases/latest)

Исходный код плагина распологается здесь (https://github.com/samp-incognito/samp-streamer-plugin/releases/latest).

Windows версия поддерживает Microsoft .NET Framework 4.5.1 (http://www.microsoft.com/en-us/download/details.aspx?id=40773) или выше. Если не получится установить это для сервера, положьте эти файлы (http://www.mediafire.com/download/g48bjzwuli7gz63/Microsoft.VC120.CRT.zip) в директорию сервера ( в корневой каталог вместе с samp-server.exe ).


Автор: Incognito
Перевод и дополнение: L0ndl3m (http://pro-pawn.ru/member.php?2057)
Оригинал: http://forum.sa-mp.com/showthread.php?t=102865 (http://forum.sa-mp.com/showthread.php?t=102865)

Специально для: Pro-Pawn.Ru (http://pro-pawn.ru)

Копирование данной статьи без разрешения автора запрещено!

Archange
14.09.2014, 00:46
CrashDetected c ним не работает, пришлось откат делать то 2.7.2

Salvacore
14.09.2014, 00:49
CrashDetected c ним не работает, пришлось откат делать то 2.7.2
Первым крашдетект загружай.

Shayba
05.12.2014, 07:29
Пожалуйста если не сложно кому объясните по порядку что куда вписывать,я наверное что то не туда вставляю,у меня ошибок целый вагон и тележка появляется.
С меня + за старанее

Osetin
06.12.2014, 01:24
Пожалуйста если не сложно кому объясните по порядку что куда вписывать,я наверное что то не туда вставляю,у меня ошибок целый вагон и тележка появляется.
С меня + за старанее

Установка:

Файлы streamer.dll и streamer.so распакуйте в папку plugins ( вы можете положить один из них, .dll - для Windows, .so - для Linux ).

Открываем файл server.cfg находим строку plugins и подписываем напротив этой строки:
На хостинге ( linux ):

streamer.so
На локалке ( windows ):

streamer.dll

Файл streamer.inc распакуйте в папку pawno/include.

Открываем ваш мод, и после всех инклудов прописываем строку:

#include <streamer>

Если например, у вас было так:


#include <a_samp>
#include <sscanf2>
#include <dc_cmd>

То с подключенным плагином это будет выглядеть примерно так:


#include <a_samp>
#include <sscanf2>
#include <dc_cmd>
#include <streamer>


Обязательно перекомпилируйте ваш мод с новым плагином и инклюдом.

Shayba
06.12.2014, 12:24
Osetin

А у меня уже есть тот streamer,и в server.cfg и в папке plugins,я в моде после всех #include записан.

Unreal
12.08.2015, 13:28
я по искал, может плохо искал, но не нашел тему с более новой версией, в оф. форуме стоит 2.7.8, но нигде не нашел список обновлении версий

прошу залить более новую версию и список обновлении, заранее спасибо

- - - Добавлено - - -

оу, прошу простить, я нашел список в самом файле, спасибо