rendered paste body#define FILTERSCRIPT#include <a_samp>#include <foreach>#include <pstream>enum e_PICKUP{ e_PICKUP_ID, e_PICKUP_TYPE, e_PICKUP_MODEL, e_PICKUP_WORLD, Float:e_PICKUP_XPOS, Float:e_PICKUP_YPOS, Float:e_PICKUP_ZPOS, Float:e_PICKUP_VIEWDIST,}new gStreamedPickups[PSTREAM_MAX_PICKUPS][e_PICKUP];Itter_Create(Pickup, PSTREAM_MAX_PICKUPS);forward PStream_Create(model, type, Float:x, Float:y, Float:z, world, Float:viewdist);forward PStream_Destroy(pickupid);forward PStream_GetID(pickupid);forward PStream_Update();public OnFilterScriptInit(){ Itter_Add(Pickup, 0); // fake pickup SetTimer("PStream_Update", PSTREAM_UPDATE_INTERVAL, true); for (new player; player < MAX_PLAYERS; player++) { if (IsPlayerConnected(player)) { Itter_Add(Player, player); } } return 1;}public OnFilterScriptExit(){ foreach (Pickup, pickup) { PStream_Destroy(pickup); } return 1;}public PStream_Create(model, type, Float:x, Float:y, Float:z, world, Float:viewdist){ if (Itter_Count(Pickup) < PSTREAM_MAX_PICKUPS) { new pickupid = Itter_Free(Pickup); Itter_Add(Pickup, pickupid); gStreamedPickups[pickupid][e_PICKUP_ID] = -1; gStreamedPickups[pickupid][e_PICKUP_XPOS] = x; gStreamedPickups[pickupid][e_PICKUP_YPOS] = y; gStreamedPickups[pickupid][e_PICKUP_ZPOS] = z; gStreamedPickups[pickupid][e_PICKUP_TYPE] = type; gStreamedPickups[pickupid][e_PICKUP_MODEL] = model; gStreamedPickups[pickupid][e_PICKUP_WORLD] = world; gStreamedPickups[pickupid][e_PICKUP_VIEWDIST] = viewdist; //printf("pickup added: id=%d, type=%d, x=%f, y=%f, z=%f, world=%d, dist=%f", pickupid, type, x, y, z, world, viewdist); return pickupid; } return -1; } public PStream_Destroy(pickupid){ if (pickupid > 0 && Itter_Remove(Pickup, pickupid)) { DestroyPickup(gStreamedPickups[pickupid][e_PICKUP_ID]); gStreamedPickups[pickupid][e_PICKUP_ID] = -1; //printf("pickup deleted: %d", pickupid); return pickupid; } return -1; }public PStream_GetID(pickupid){ foreach (Pickup, pickup) { if (!pickup) continue; if (gStreamedPickups[pickup][e_PICKUP_ID] == pickupid) { return pickup; } } return -1;}public PStream_Update(){ new somebody_see_it, pickup_count; foreach (Pickup, pickup) { if (!pickup) continue; // fake pickup foreach (Player, player) { if (IsPlayerInRangeOfPoint(player, gStreamedPickups[pickup][e_PICKUP_VIEWDIST], gStreamedPickups[pickup][e_PICKUP_XPOS], gStreamedPickups[pickup][e_PICKUP_YPOS], gStreamedPickups[pickup][e_PICKUP_ZPOS])) { somebody_see_it = true; break; } } if (somebody_see_it) { if (gStreamedPickups[pickup][e_PICKUP_ID] == -1) { gStreamedPickups[pickup][e_PICKUP_ID] = CreatePickup(gStreamedPickups[pickup][e_PICKUP_MODEL], gStreamedPickups[pickup][e_PICKUP_TYPE], gStreamedPickups[pickup][e_PICKUP_XPOS], gStreamedPickups[pickup][e_PICKUP_YPOS], gStreamedPickups[pickup][e_PICKUP_ZPOS], gStreamedPickups[pickup][e_PICKUP_WORLD]); } pickup_count++; } else { DestroyPickup(gStreamedPickups[pickup][e_PICKUP_ID]); gStreamedPickups[pickup][e_PICKUP_ID] = -1; } somebody_see_it = false; if (pickup_count == MAX_PICKUPS) break; } return 1;}