Streamer Plugin v2.7
Ez egy részletes streamer SA-MP-hez. Lehet vele végtelen Objectokat, Pickupokat, Checkpointokat, Verseny Checkpointokat, Pálya ikonokat és 3D Texteket lerakni. Ezenkívül kezel még Arénákat is. C++ al van írva, teház plugin. Használata nagyon egyszerû és a PAWNO is gyorsan kezeli.
Készítõ: Incognito
Forrás:
Klikk IdeFejlesztésekv2.6:
- Újabb algoritmus a cellák keresésére, ami a jelenleg látható tárgyakat tartalmazza. Ez segítségével nagyon megnõ a teljesítmény.
- Nagyon jól megnövelve a térbeli lekérdezések sebessége.
- Továbbfejlesztve a streamer algoritmus, ami a játékos mozgási sebességéri és a két frissítés közötti idõre épül.
- PAWN Invoke rendszer lecserélve a Zeex által készített GDK-ra. Ez nagyon nagy teljesítménynövekedést eredményez.
- Biztonsági frissítés, ami jelzi ha az új plugint a rég függvénykönyvtárral átfordított kódnál használod.
- Javítva az a hiba, amikor a frissítés megállt a Streamer_TickRate használata után.
- Végtelen interior id-t lehet használni minden tárgyhoz, ezenkívül már nem crashel, ha az ID nagyobb, mint 20.
- Virtuális világ ellenõrzése megváltoztatva a pickupokhoz, így már végtelent hozzá lehet adni.
- Némileg továbbfejlesztve a streamer algoritmus a pickupokhoz.
- OnPlayerLeaveDynamicArea mostantól mindig az OnPlayerEnterDynamicArea elõtt hívódik meg.
- Hozzáadva Streamer_ToggleIdleUpdate, ami segítéségével engedélyezni/tiltani lehet a frissítést azoknak a játékosoknak, akik nem mozognak.
- Hozzáadva a CreateDynamicPolygon
- Hozzáadva az IsPlayerInAnyDynamicArea
- Hozzáadva két optionális paraméter Streamer_UpdateEx-hez, hogy megtudd határozni a World ID-t és az Interior ID-t.
- Forgatás paraméterek hozzáadva MoveDynamicObject-hez (SA-MP 0.3d-vel megy csak)
- Hozzáadva Ex függvények, ami segítségével részletesebben betudod állítani a dolgokat.
- Hozzáadva a(z) Streamer_GetArrayData és Streamer_SetArrayData.
- Hozzáadva a Streamer_ProcessActiveItems, minek a segítségével állandóan frissülnek a mozgó és a valamilyen tárgyhoz hozzákapcsolt objectok.
- Hozzáadva a Streamer_GetDistanceToItem.
- Hozzadva a GetPlayerVisibleDynamicCP és GetPlayerVisibleDynamicRaceCP.
- Hozzáadva az IsPointInDynamicArea és IsPointInAnyDynamicArea.
- Hozzáadva az AttachDynamicAreaToObject.
Következtetõ streamer algoritmus: Ha a játékos gyorsan megy egy kocsival, akkor a streamer megpróbálja kiszámítani, hogy hol lesz az autó a következõ frissítésnél.A többi fejlesztést a readme.txt-ben találod meg.
FüggvényekÁllításra szolgáló fuggvények:
native Streamer_TickRate(rate); // TickRate értéknek áttállítása. EZ NEM AZT JELENTI, HOGY MENNYI MS-ENKÉNT FUSSON LE!
native Streamer_MaxItems(type, items); // Maximum dolgok egy megadott típusból.
native Streamer_VisibleItems(type, items); // Maximum látható dolgok egy megadott típusból.
native Streamer_CellDistance(Float:distance); // Cella távolság
native Streamer_CellSize(Float:size); // Cella mérete
Környezet frissítése:
native Streamer_ProcessActiveItems();
native Streamer_Update(playerid); // Felújítsa a játékos körül a környezetet, alapból lekéri a kordinátáidat.
native Streamer_UpdateEx(playerid, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1); // ^ szintén, csak itt neked kell megadni a kordinátákat és a paramétereket.
native Streamer_ToggleIdleUpdate(playerid, toggle); // Engedélyzni/Tiltani lehet a frissítést, amikor a játékos nem mozog. ( Tehát egyhelyen áll )
Adat állítás:
native Streamer_GetFloatData(type, {Text3D,_}:id, data, &Float:result); // Lekérünk vele egy tizedes számot számot tároló változó értékét.
native Streamer_GetIntData(type, {Text3D,_}:id, data); // Lekérünk vele egy számot egész számot tároló változó értékét.
native Streamer_SetFloatData(type, {Text3D,_}:id, data, Float:value); // Áttállítunk vele egy tizedes számot tároló változót.
native Streamer_SetIntData(type, {Text3D,_}:id, data, value); // Áttállítunk vele egy egész számot tároló változót.
native Streamer_GetArrayData(type, {Text3D,_}:id, data, dest[], maxlength = sizeof dest);
native Streamer_SetArrayData(type, {Text3D,_}:id, data, const src[], maxlength = sizeof src);
native Streamer_IsInArrayData(type, {Text3D,_}:id, data, value); // A megadott adat benne-e van a megadott tömbben.
native Streamer_AppendArrayData(type, {Text3D,_}:id, data, value); // Megadott adat belerakása a megadott tömbbe.
native Streamer_RemoveArrayData(type, {Text3D,_}:id, data, value); // Megadott adat törlése a megadott tömbbõl.
native Streamer_GetUpperBound(type); // Legmagasabb azonosító.
Egyéb:
native Streamer_GetDistanceToItem(Float:x, Float:y, Float:z, type, {Text3D,_}:id, &Float:distance);
native Streamer_IsItemVisible(playerid, type, {Text3D,_}:id); // Látható-e a tárgy a játékosnak.
native Streamer_DestroyAllVisibleItems(playerid, type); // Minden látható dolog törlése a játékosnak.
native Streamer_CountVisibleItems(playerid, type); // Minden látható dolog megszámlálása a megadott játékosnak a kiválaszott típusból. ( Pl:. Tehát megszámolja mennyi object van jelenleg betöltve az ID 0-nak )
Objectok:
native CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.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, txdname[], 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 DestroyAllDynamicObjects();
native CountDynamicObjects();
Pickupok:
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 DestroyAllDynamicPickups();
native CountDynamicPickups();
Ellenõrzõpontok:
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 DestroyAllDynamicCPs();
native CountDynamicCPs();
Verseny Ellenõrzõpontok:
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 DestroyAllDynamicRaceCPs();
native CountDynamicRaceCPs();
Pálya ikonok:
native CreateDynamicMapIcon(Float:x, Float:y, Float:z, type, color, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0);
native DestroyDynamicMapIcon(iconid);
native IsValidDynamicMapIcon(iconid);
native DestroyAllDynamicMapIcons();
native CountDynamicMapIcons();
3D Szövegek:
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[], maxlength = sizeof text);
native UpdateDynamic3DTextLabelText(Text3D:id, color, const text[]);
native DestroyAllDynamic3DTextLabels();
native CountDynamic3DTextLabels();
Arénák:
native CreateDynamicCircle(Float:x, Float:y, 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 CreateDynamicSphere(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1);
native CreateDynamicCube(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 TogglePlayerDynamicArea(playerid, areaid, toggle);
native TogglePlayerAllDynamicAreas(playerid, toggle);
native IsPlayerInDynamicArea(playerid, areaid);
native IsPlayerInAnyDynamicArea(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 DestroyAllDynamicAreas();
native CountDynamicAreas();
Ex függvények:
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 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 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 CreateDynamicCubeEx(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);
Callbackok
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 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);
Defincíciók
#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_RECTANGLE (1)
#define STREAMER_AREA_TYPE_SPHERE (2)
#define STREAMER_AREA_TYPE_CUBE (3)
#define STREAMER_AREA_TYPE_POLYGON (4)
#define STREAMER_OBJECT_TYPE_GLOBAL (0)
#define STREAMER_OBJECT_TYPE_PLAYER (1)
#define STREAMER_OBJECT_TYPE_DYNAMIC (2)
Tárolók
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
}
Gyors használatElsõ, hozz létre a szerver mappádban egy plugins nevû mappát, majd húzd bele a streamer.dll-et és a streamer.so -t.
Ezután írd bele a server.cfg be az Operációs Rendszernek megfelelõen a plugint.
Windows esetén:
( Ha még a plugins sor nem létezik, akkor hozd létre, mind ahogy itt lent látod )
plugins streamer.dll
Linux esetén:
plugins streamer.so
Tovább, szúrd be az #include <a_samp> alá ezt :
( Teszt Filterscriptben nemkell, mert márt benne van )
#include <streamer>
Ezután a funkciókat át kell alakítani azokra, amik fent le vannak írva.
Megyjegyzés- Alap tickrate: 50
- Alapból maximum dolgok: Nincs meghatározva, annyi, amennyi belefér a ramba. Tehát majdnem végtelen.
- Egyszerre betöltheto tárgyak: 500(object); 2048 (pickup); 1024 (3D text)
- A -1 használható a következõknél, ez azt jelenti, hogy mindenhol megjelenik.: playerid, interior, virtualworld.
- Nem fontos minden dolgot streamelve használnod.
- Ne keverd a streamelt dolgokat az alap függvényekkel, mert akkor nagy kavarodások lesznek.
-
Ha a skinválasztóban streamelt objectok vannak, akkor használd a Streamer_UpdateEx-et, hogy betöltse neked. ( Beírod neki a játékos pozícióját. )- Az objectokat konvertáld y_object formátumba ( a konvertálóba válazd a YSI-t ), konvertáló:
Advanced Converter- Lehetõséged van mindenféle adatot áttálítani. Ezt csak ennél a streamernél tudod megcsinálni.Adatmódosítás vs VirtualWorldCellák Ezt a közeljövõben lefogom fordítani és még az összes többit, ami a hivatalos fórumon van
LetöltésGitHub[dload]
Öregebb verziókat (Mind csak 0.3b-t támogat)
innen tudod letölteni.
Konvertáló (Advanced Converter)Példa FilterScript az objectokra Ha windows-on futtatod, akkor szükésged lesz a
.NET Framework 4.5.1-re vagy magasabbra.