View difference between Paste ID: M0cy1Zzv and L7ECMRbh
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
}