/////////////////////// ////Object Streamer//// //////Created by:////// ////////Fallout//////// /////////////////v0.7// #include //Natives///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* Functions: ---------- native F_CreateObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, Float:vdist=0.0); //creates an object. native F_CreatePlayerObject(playerid, modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, Float:vdist=0.0); //creates a player-specific object native F_DestroyObject(objectid); //destroys an object. native F_PlayerObjectUpdate(playerid, Float:x, Float:y, Float:z); //update objects for a player in a certain position. native F_MoveObject(objectid, Float:x, Float:y, Float:z, Float:speed); //moves an object. native F_StopObject(objectid); //stops an object from moving. native F_AttachObjectToPlayer(objectid, playerid, Float:x, Float:y, Float;z, Float:rx, Float:ry, Float:rz); //attaches an object to a player. native F_IsValidObject(objectid); //returns 1 if object is valid, returns 0 if object is invalid. native F_SetObjectPos(objectid, Float:x, Float:y, Float:z); //sets the position of an object. native F_GetObjectPos(objectid, &Float:x, &Float:y, &Float:z); //gets the position of an object in x, y and z. native F_SetObjectRot(objectid, Float:rx, Float:ry, Float:rz); //sets the rotation of an object. native F_GetObjectRot(objectid, &Float:rx, &Float:ry, &Float:rz); //gets the rotation of an object in rx, ry and rz. native F_RefreshObjects(playerid); //recreates (refreshes) a certain player's objects. (useful to recreate broken objects like glass, boxes, barrels, ...) native F_ObjectUpdateForAll(); //instantly updates the objects for all players. Callbacks: ---------- native F_OnObjectMoved(objectid); //callback which is called when an object has finished moving. */ //Configuration/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #define F_MAX_OBJECTS 1200 //maximum amount of objects the streamer will create; PLEASE change this to the amount of objects you are using. #define UpdateTime 2000 //update time in ms (milliseconds). A lower value means faster updating. #define ObjectsToStream 350 //maximum number of objects that will be streamed for one player (maximum = 400 objects). #define StreamRange 400.0 //the player's object view range, doesn't need to be changed because objects only start showing at 350 distance. #pragma dynamic 30000 //increase this value if you have problems with stach/heap size. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// enum OInfo { ModelID, ObjectID[MAX_PLAYERS], Float:ox, Float:oy, Float:oz, Float:orx, Float:ory, Float:orz, Float:ovdist, PlayerID, ObjectAttachedID, bool:ObjectMoving, bool:ObjectCreated[MAX_PLAYERS], } new ObjectInfo[F_MAX_OBJECTS][OInfo]; new bool:ObjectUpdatetRunning; new bool:CantCreateMore; new bool:RefreshObjects[MAX_PLAYERS]; new bool:DontUpdate[MAX_PLAYERS]; new Float:OldX[MAX_PLAYERS], Float:OldY[MAX_PLAYERS], Float:OldZ[MAX_PLAYERS]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// forward F_StartUpdate(); public F_StartUpdate() { SetTimer("F_ObjectUpdate", UpdateTime, 1); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// stock F_CreateObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, Float:vdist=0.0, playerid=-1) { if(ObjectUpdatetRunning == false) { SetTimer("F_StartUpdate", F_MAX_OBJECTS/2, 0); ObjectUpdatetRunning = true; } new objectid; if(CantCreateMore == false) for(new i; i ObjectsToStream) for(new loop; loop ObjectsToStream) for(new loop; loop