View difference between Paste ID: xXeTkFiE and Vsz2ekHV
SHOW: | | - or go back to the newest paste.
1
//***** Made by TopAz in 15 minutes.
2
3
4
//----- Header
5
#if defined _getnearest_included
6
	#endinput
7
#endif
8
#define _getnearest_included
9
#pragma library samp
10
//----------------
11
12
//----- External Library(ies)
13
#include <a_samp>
14
//------------------------
15
16
//----- Constants 
17
/*#if defined USE_STREAMER
18
	#include "streamer"
19
#endif*/
20
21
#define	OBJECT				(0)
22
#define PLAYER				(1)
23
#define VEHICLE				(2)
24
#define DYNAMIC_OBJECT		(3)
25
26
#define MAX_DISTANCE		(1000.0)			
27
//----------------
28
29
//------ Variables
30
31
//Floats
32
new 
33
	Float:px, 
34
	Float:py, 
35
	Float:pz, 
36
	Float:ox,
37
	Float:oy,
38
	Float:oz,
39
	Float:distance = MAX_DISTANCE
40
;
41
42
//----------------
43
44
GetNearest(playerid, type);
45
46
stock GetNearest(playerid, type)
47
{
48
	new ret;
49
	switch(type)
50
	{
51-
			GetNearest_Object(playerid);
51+
52
		{
53
			ret = GetNearest_Object(playerid);
54
		}
55-
			GetNearest_Player(playerid);
55+
56
		{
57
			ret = GetNearest_Player(playerid);
58
		}
59-
			GetNearest_Vehicle(playerid);
59+
60
		{
61
			ret = GetNearest_Vehicle(playerid);
62
		}
63-
			GetNearest_DynObject(playerid);
63+
64
		{
65
			ret = GetNearest_DynObject(playerid);
66
		}
67
	}
68
	return ret;
69
}
70
71
stock GetNearest_Object(playerid)
72
{
73
	new currentobject = -1;
74
    GetPlayerPos(playerid, px, py, pz);
75
    for(new i = 0; i < MAX_OBJECTS; i++)
76
    {
77
		if(!IsValidObject(i)) continue;
78
        GetDynamicObjectPos(i, ox, oy, oz);
79
        new Float:odist = floatsqroot(
80
            floatpower(floatabs(floatsub(ox, px)), 2.0) +
81
            floatpower(floatabs(floatsub(oy, py)), 2.0) +
82
            floatpower(floatabs(floatsub(oz, pz)), 2.0)
83
        );
84
		if (currentobject == -1)
85
        {
86
            currentobject = i;
87
            distance = odist;
88
        }
89
		else if (odist < distance)
90
        {
91
            currentobject = i;
92
            distance = odist;
93
        }
94
    }
95
    return currentobject;
96
}
97
98
stock GetNearest_Player(playerid)
99
{
100
	new currentplayer = -1;
101
    GetPlayerPos(playerid, px, py, pz);
102
    for(new i = 0; i < MAX_PLAYERS; i++)
103
    {
104
		if(i == playerid) continue;
105
        GetPlayerPos(i, ox, oy, oz);
106
        new Float:odist = floatsqroot(
107
            floatpower(floatabs(floatsub(ox, px)), 2.0) +
108
            floatpower(floatabs(floatsub(oy, py)), 2.0) +
109
            floatpower(floatabs(floatsub(oz, pz)), 2.0)
110
        );
111
		if (currentplayer == -1)
112
        {
113
            currentplayer = i;
114
            distance = odist;
115
        }
116
		else if (odist < distance)
117
        {
118
            currentplayer = i;
119
            distance = odist;
120
        }
121
    }
122
    return currentplayer;
123
}
124
125
stock GetNearest_Vehicle(playerid)
126
{
127
	new currentvehicle = -1;
128
    GetPlayerPos(playerid, px, py, pz);
129
    for(new i = 0; i < MAX_VEHICLES; i++)
130
    {
131
        GetVehiclePos(i, ox, oy, oz);
132
        new Float:odist = floatsqroot(
133
            floatpower(floatabs(floatsub(ox, px)), 2.0) +
134
            floatpower(floatabs(floatsub(oy, py)), 2.0) +
135
            floatpower(floatabs(floatsub(oz, pz)), 2.0)
136
        );
137
		if (currentvehicle == -1)
138
        {
139
            currentvehicle = i;
140
            distance = odist;
141
        }
142
		else if (odist < distance)
143
        {
144
            currentvehicle = i;
145
            distance = odist;
146
        }
147
    }
148
    return currentvehicle;
149
}
150
151
stock GetNearest_DynObject(playerid)
152
{
153
	new currentdynobject = -1;
154
    GetPlayerPos(playerid, px, py, pz);
155
    for(new i = 0; i < CountDynamicObjects(); i++)
156
    {
157
		if(!IsValidDynamicObject(i)) continue;
158
        GetDynamicObjectPos(i, ox, oy, oz);
159
        new Float:odist = floatsqroot(
160
            floatpower(floatabs(floatsub(ox, px)), 2.0) +
161
            floatpower(floatabs(floatsub(oy, py)), 2.0) +
162
            floatpower(floatabs(floatsub(oz, pz)), 2.0)
163
        );
164
		if (currentdynobject == -1)
165
        {
166
            currentdynobject = i;
167
            distance = odist;
168
        }
169
		else if (odist < distance)
170
        {
171
            currentdynobject = i;
172
            distance = odist;
173
        }
174
    }
175
    return currentdynobject;
176
}