SHOW:
|
|
- or go back to the newest paste.
| 1 | #if !defined MAX_REMOVED_OBJECTS | |
| 2 | #define MAX_REMOVED_OBJECTS 100 | |
| 3 | #endif | |
| 4 | ||
| 5 | enum RemovedObjectsENUM {_model, Float:_oX, Float:_oY, Float:_oZ, Float:_orX, Float:_orY, Float:_orZ, Float:_oRadius, restored}
| |
| 6 | new RemovedObjects[MAX_REMOVED_OBJECTS][RemovedObjectsENUM]; | |
| 7 | ||
| 8 | /* | |
| 9 | 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); | |
| 10 | native RestoreBuilding(slotid); | |
| 11 | native RemoveSpecificBuilding(modelid); | |
| 12 | ||
| 13 | native CountRemovedObjects(); | |
| 14 | */ | |
| 15 | ||
| 16 | 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) | |
| 17 | {
| |
| 18 | for(new i; i < MAX_REMOVED_OBJECTS; i++) | |
| 19 | {
| |
| 20 | if(RemovedObjects[i][_model] != modelid) continue; | |
| 21 | if(RemovedObjects[i][restored] != 0) | |
| 22 | {
| |
| 23 | if((RemovedObjects[i][_oX] == oX) && (RemovedObjects[i][_oY] == oY) && (RemovedObjects[i][_oZ] == oZ)) | |
| 24 | {
| |
| 25 | DestroyObject(RemovedObjects[i][restored]); | |
| 26 | RemovedObjects[i][restored] = 0; | |
| 27 | RemovedObjects[i][_model] = 0; | |
| 28 | return i; | |
| 29 | } | |
| 30 | } | |
| 31 | } | |
| 32 | ||
| 33 | new slot = GetObjectFreeSlot(); | |
| 34 | if(slot == -1) return printf("\tCannot remove any more objects.\nIncrease MAX_REMOVED_OBJECTS in your script.\nIt is currently: %i", MAX_REMOVED_OBJECTS);
| |
| 35 | ||
| 36 | RemovedObjects[slot][_model] = modelid; | |
| 37 | RemovedObjects[slot][_oX] = oX; | |
| 38 | RemovedObjects[slot][_oY] = oY; | |
| 39 | RemovedObjects[slot][_oZ] = oZ; | |
| 40 | RemovedObjects[slot][_oRadius] = oRadius; | |
| 41 | ||
| 42 | RemovedObjects[slot][_orX] = orX; | |
| 43 | RemovedObjects[slot][_orY] = orY; | |
| 44 | RemovedObjects[slot][_orZ] = orZ; | |
| 45 | ||
| 46 | for(new i; i < MAX_PLAYERS; i++) | |
| 47 | {
| |
| 48 | if(!IsPlayerConnected(i)) continue; | |
| 49 | RemoveBuildingForPlayer(i, modelid, oX, oY, oZ, oRadius); | |
| 50 | } | |
| 51 | return slot; | |
| 52 | } | |
| 53 | ||
| 54 | stock RestoreBuilding(slotid) | |
| 55 | {
| |
| 56 | if(slotid < 0 || slotid > MAX_REMOVED_OBJECTS) return 0; | |
| 57 | if(RemovedObjects[slotid][_model] == 0) return 0; | |
| 58 | RemovedObjects[slot][restored] = CreateObject(RemovedObjects[slot][_model], RemovedObjects[slot][_oX], RemovedObjects[slot][_oY], RemovedObjects[slot][_oZ], RemovedObjects[slot][_orX], RemovedObjects[slot][_orY], RemovedObjects[slot][_orZ]); | |
| 59 | return RemovedObjects[slot][restored]; | |
| 60 | } | |
| 61 | ||
| 62 | stock RemoveSpecificBuilding(modelid) | |
| 63 | {
| |
| 64 | return RemoveBuilding(modelid, 0.0, 0.0, 0.0, 10000.0); | |
| 65 | } | |
| 66 | ||
| 67 | forward REMOBJ_OnPlayerConnect(playerid); | |
| 68 | public OnPlayerConnect(playerid) | |
| 69 | {
| |
| 70 | for(new i; i < MAX_REMOVED_OBJECTS; i++) | |
| 71 | {
| |
| 72 | if(RemovedObjects[i][_model] != 0) RemoveBuildingForPlayer(playerid, RemovedObjects[i][_model], RemovedObjects[i][_oX], RemovedObjects[i][_oY], RemovedObjects[i][_oZ], RemovedObjects[i][_oRadius]); | |
| 73 | } | |
| 74 | if(funcidx("REMOBJ_OnPlayerConnect") != -1) CallLocalFunction("REMOBJ_OnPlayerConnect", "i", playerid);
| |
| 75 | return 1; | |
| 76 | } | |
| 77 | #if defined _ALS_OnPlayerConnect | |
| 78 | #undef OnPlayerConnect | |
| 79 | #else | |
| 80 | #define _ALS_OnPlayerConnect | |
| 81 | #endif | |
| 82 | #define OnPlayerConnect REMOBJ_OnPlayerConnect | |
| 83 | ||
| 84 | stock GetObjectFreeSlot() | |
| 85 | {
| |
| 86 | for(new i; i < MAX_REMOVED_OBJECTS; i++) | |
| 87 | {
| |
| 88 | if(RemovedObjects[i][_model] == 0) return i; | |
| 89 | } | |
| 90 | return -1; | |
| 91 | } | |
| 92 | ||
| 93 | stock CountRemovedObjects() | |
| 94 | {
| |
| 95 | new count = 0; | |
| 96 | for(new i; i < MAX_REMOVED_OBJECTS; i++) | |
| 97 | {
| |
| 98 | if(RemovedObjects[i][_model] != 0) count++; | |
| 99 | } | |
| 100 | return count; | |
| 101 | } |