| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #if !defined MAX_REMOVED_OBJECTS
- #define MAX_REMOVED_OBJECTS 20000
- #endif
- enum RemovedObjectsENUM {_model, Float:_oX, Float:_oY, Float:_oZ, Float:_orX, Float:_orY, Float:_orZ, Float:_oRadius, restored}
- new RemovedObjects[MAX_REMOVED_OBJECTS][RemovedObjectsENUM];
- /*
- native RemoveBuilding(modelid, Float:oX, Float:oY, Float:oZ, Float:oRadius = 0.25, Float:orX = 0.0, Float:orY = 0.0, Float:orZ = 0.0);
- native RestoreBuilding(slotid);
- native RemoveSpecificBuilding(modelid);
- native CountRemovedObjects();
- */
- stock RemoveBuilding(modelid, Float:oX, Float:oY, Float:oZ, Float:oRadius = 0.25, Float:orX = 0.0, Float:orY = 0.0, Float:orZ = 0.0)
- {
- for(new i; i < MAX_REMOVED_OBJECTS; i++)
- {
- if(RemovedObjects[i][_model] != modelid) continue;
- if(RemovedObjects[i][restored] != 0)
- {
- if((RemovedObjects[i][_oX] == oX) && (RemovedObjects[i][_oY] == oY) && (RemovedObjects[i][_oZ] == oZ))
- {
- DestroyObject(RemovedObjects[i][restored]);
- RemovedObjects[i][restored] = 0;
- RemovedObjects[i][_model] = 0;
- return i;
- }
- }
- }
- new slot2 = GetObjectFreeSlot();
- if(slot2 == -1) return printf("\tCannot remove any more objects.\nIncrease MAX_REMOVED_OBJECTS in your script.\nIt is currently: %i", MAX_REMOVED_OBJECTS);
-
- RemovedObjects[slot2][_model] = modelid;
- RemovedObjects[slot2][_oX] = oX;
- RemovedObjects[slot2][_oY] = oY;
- RemovedObjects[slot2][_oZ] = oZ;
- RemovedObjects[slot2][_oRadius] = oRadius;
- RemovedObjects[slot2][_orX] = orX;
- RemovedObjects[slot2][_orY] = orY;
- RemovedObjects[slot2][_orZ] = orZ;
- for(new i; i < MAX_PLAYERS; i++)
- {
- if(!IsPlayerConnected(i)) continue;
- RemoveBuildingForPlayer(i, modelid, oX, oY, oZ, oRadius);
- }
- return slot2;
- }
- stock RemoveSpecificBuilding(modelid)
- {
- return RemoveBuilding(modelid, 0.0, 0.0, 0.0, 10000.0);
- }
- forward REMOBJ_OnPlayerConnect(playerid);
- public OnPlayerConnect(playerid)
- {
- for(new i; i < MAX_REMOVED_OBJECTS; i++)
- {
- if(RemovedObjects[i][_model] != 0) RemoveBuildingForPlayer(playerid, RemovedObjects[i][_model], RemovedObjects[i][_oX], RemovedObjects[i][_oY], RemovedObjects[i][_oZ], RemovedObjects[i][_oRadius]);
- }
- if(funcidx("REMOBJ_OnPlayerConnect") != -1) CallLocalFunction("REMOBJ_OnPlayerConnect", "i", playerid);
- return 1;
- }
- #if defined _ALS_OnPlayerConnect
- #undef OnPlayerConnect
- #else
- #define _ALS_OnPlayerConnect
- #endif
- #define OnPlayerConnect REMOBJ_OnPlayerConnect
- stock GetObjectFreeSlot()
- {
- for(new i; i < MAX_REMOVED_OBJECTS; i++)
- {
- if(RemovedObjects[i][_model] == 0) return i;
- }
- return -1;
- }
- stock CountRemovedObjects()
- {
- new count = 0;
- for(new i; i < MAX_REMOVED_OBJECTS; i++)
- {
- if(RemovedObjects[i][_model] != 0) count++;
- }
- return count;
- }
|