View difference between Paste ID: QfuD7HNL and 4Sc5X6zS
SHOW: | | - or go back to the newest paste.
1
/*
2
	SA-MP Exploding Petroltank Filterscript
3
	Copyright © 2011 RyDeR`
4
*/
5
6
#include <a_samp>
7
8
#define FILTERSCRIPT
9
#define VERSION "v0.1.0"
10
11
public OnFilterScriptInit()
12
{
13
	printf("\n » Petrolcap Explosion [" VERSION "] (by RyDeR`) has been loaded. \n");
14
	return 1;
15
}
16
17
public OnFilterScriptExit()
18
{
19
	printf("\n » Petrolcap Explosion [" VERSION "] (by RyDeR`) has been unloaded. \n");
20
	return 1;
21
}
22
23
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
24
{	
25
	#define PRESSED(%0) \
26
		(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
27
		
28
	if(PRESSED(KEY_FIRE) && GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
29
	{	
30
		new
31
			Float: vehPos[3],
32
			Float: vehAngle,
33
			Float: capOffsets[3]
34
		;
35
		for(new vehicleID = 1; vehicleID <= MAX_VEHICLES; ++vehicleID)
36
		{
37
			if(GetVehiclePos(vehicleID, vehPos[0], vehPos[1], vehPos[2]))
38
			{
39
				GetVehicleZAngle(vehicleID, vehAngle);
40
				
41
				if(GetPetrolcapOffsets(GetVehicleModel(vehicleID), capOffsets[0], capOffsets[1], capOffsets[2]))
42
				{
43
					vehPos[0] += (floatcos(vehAngle, degrees) * capOffsets[0]) - (floatsin(vehAngle, degrees) * capOffsets[1]);
44
					vehPos[1] += (floatsin(vehAngle, degrees) * capOffsets[0]) + (floatcos(vehAngle, degrees) * capOffsets[1]);
45
					vehPos[2] += capOffsets[2];
46
47
					if(IsPlayerAimingAtPoint(playerid, vehPos[0], vehPos[1], vehPos[2], 0.1))
48
					{
49
						SetVehicleHealth(vehicleID, 0.0);
50
						CreateExplosion(vehPos[0], vehPos[1], vehPos[2], 0, random(3) + 4.0);	
51
						
52
						break;
53
					}
54
				}
55
			}
56
		}
57
	}
58
	#undef PRESSED
59
	
60
	return 1;
61
}
62
63
stock Float: GetDistanceCameraToLocation(Float: cam_X, Float: cam_Y, Float: cam_Z, Float: vect_X, Float: vect_Y, Float: vect_Z, Float: dest_X, Float: dest_Y, Float: dest_Z, Float: targetDist = 0.0)
64
{
65
	cam_X -= dest_X;
66
	cam_Y -= dest_Y;
67
	cam_Z -= dest_Z;
68
	
69
	targetDist = floatsqroot(cam_X * cam_X + cam_Y * cam_Y + cam_Z * cam_Z);
70
	
71
	cam_X += vect_X * targetDist;
72
	cam_Y += vect_Y * targetDist;
73
	cam_Z += vect_Z * targetDist;
74
	
75
	return floatsqroot(cam_X * cam_X + cam_Y * cam_Y + cam_Z * cam_Z);
76
}
77
78
stock IsPlayerAimingAtPoint(playerid, Float: pos_X, Float: pos_Y, Float: pos_Z, Float: aimRadius)
79
{
80
	new
81
		Float: cam_Pos[3],
82
		Float: cam_Vect[3]
83
	;
84
	GetPlayerCameraPos(playerid, cam_Pos[0], cam_Pos[1], cam_Pos[2]);
85
	GetPlayerCameraFrontVector(playerid, cam_Vect[0], cam_Vect[1], cam_Vect[2]);
86
87
	new
88
		Float: aimOffset
89
	;
90
	switch(GetPlayerWeapon(playerid))
91
	{
92
		case 22, 23, 24, 25, 26, 27, 28, 29, 32, 38: aimOffset = -2.1;
93
		case 30, 31: aimOffset = -1.3;
94
		case 33: aimOffset = -0.9;
95
		case 34: return GetDistanceCameraToLocation(cam_Pos[0], cam_Pos[1], cam_Pos[2], cam_Vect[0], cam_Vect[1], cam_Vect[2], pos_X, pos_Y, pos_Z) < aimRadius;
96
		default: return 0;
97
	}
98
	new
99
		Float: aimAngle = atan2(cam_Vect[2], floatsqroot(cam_Vect[0] * cam_Vect[0] + cam_Vect[1] * cam_Vect[1])),
100
		Float: tmpVar
101
	;
102
	cam_Vect[2] = floatcos(aimAngle + (aimOffset * -2), degrees) * floatsin(-(atan2(cam_Vect[1], cam_Vect[0]) + aimOffset + 270.0), degrees);
103
	tmpVar = floatcos(aimAngle + (aimOffset * -2), degrees) * floatcos(-(atan2(cam_Vect[1], cam_Vect[0]) + aimOffset + 270.0), degrees);
104
	
105
	return GetDistanceCameraToLocation(cam_Pos[0], cam_Pos[1], cam_Pos[2], cam_Vect[2], tmpVar, floatsin(aimAngle + (aimOffset * -2), degrees), pos_X, pos_Y, pos_Z) < aimRadius;
106
}
107
108
stock GetPetrolcapOffsets(modelID, &Float: aimOffset_X, &Float: aimOffset_Y, &Float: aimOffset_Z)
109
{
110
	enum e_PetrolcapData
111
	{
112
		e_ModelID,
113
		Float: e_Offset_X,
114
		Float: e_Offset_Y,
115
		Float: e_Offset_Z
116
	};
117
	static const
118
		g_PetrolcapData[][e_PetrolcapData] =
119
		{
120
			{ 400, -1.100, -2.059, -0.070 },
121
			{ 401, 1.090, -0.939, 0.000 },
122
			{ 402, 1.039, -1.919, 0.140 },
123
			{ 403, -1.450, 0.070, -0.800 },
124
			{ 404, -0.939, -2.359, -0.009 },
125
			{ 405, -1.039, -2.180, -0.039 },
126
			{ 407, -1.110, -3.660, -0.540 },
127
			{ 408, -1.230, 1.299, -0.660 },
128
			{ 409, -0.980, -2.829, 0.119 },
129
			{ 410, -1.019, -1.669, 0.209 },
130
			{ 411, 1.090, -2.099, 0.090 },
131
			{ 412, 0.000, -3.549, -0.170 },
132
			{ 413, -1.049, 0.340, -0.529 },
133
			{ 414, -0.920, -0.740, -0.699 },
134
			{ 415, -1.129, -2.069, 0.019 },
135
			{ 416, -1.350, -2.740, -0.189 },
136
			{ 418, -1.179, -1.769, -0.019 },
137
			{ 418, 1.210, -1.570, -0.079 },
138
			{ 419, -1.080, -1.990, 0.029 },
139
			{ 420, -1.100, -2.150, 0.100 },
140
			{ 421, -1.070, -2.440, -0.170 },
141
			{ 422, -1.080, -0.419, -0.200 },
142
			{ 423, -1.169, -1.899, -0.319 },
143
			{ 424, 0.180, 1.080, 0.430 },
144
			{ 426, -1.100, -2.150, 0.090 },
145
			{ 427, -1.269, -3.200, -0.159 },
146
			{ 428, -1.009, -3.059, -0.490 },
147
			{ 429, 0.990, -2.140, 0.140 },
148
			{ 431, -1.450, -5.469, -0.129 },
149
			{ 433, -1.519, 0.159, -0.680 },
150
			{ 434, -0.730, -1.580, 0.289 },
151
			{ 436, -1.070, -1.820, 0.140 },
152
			{ 437, -1.490, -4.969, -0.500 },
153
			{ 438, -1.090, -1.929, -0.019 },
154
			{ 439, -1.110, -1.509, 0.059 },
155
			{ 440, -1.090, -0.460, -0.419 },
156
			{ 442, -1.210, -2.210, 0.059 },
157
			{ 443, -1.529, 1.240, -0.899 },
158
			{ 444, 0.000, -2.599, -0.059 },
159
			{ 445, -1.039, -1.940, 0.129 },
160
			{ 451, 1.059, -1.220, -0.039 },
161
			{ 455, -1.529, -0.009, -0.759 },
162
			{ 456, 0.790, -0.050, -0.610 },
163
			{ 458, -1.110, -2.049, -0.109 },
164
			{ 459, -0.819, -2.390, -0.479 },
165
			{ 459, -1.049, -2.289, 0.219 },
166
			{ 461, 0.000, 0.140, 0.540 },
167
			{ 463, 0.000, 0.170, 0.469 },
168
			{ 466, 0.000, -3.000, -0.129 },
169
			{ 467, -1.070, -2.299, 0.119 },
170
			{ 468, 0.000, 0.009, 0.409 },
171
			{ 470, -1.259, -2.380, 0.239 },
172
			{ 475, -1.070, -1.600, 0.129 },
173
			{ 477, -1.200, -1.529, 0.239 },
174
			{ 478, 1.090, -0.340, 0.230 },
175
			{ 479, -1.090, -1.970, 0.029 },
176
			{ 480, -1.000, -0.879, 0.100 },
177
			{ 482, 1.070, -2.190, 0.000 },
178
			{ 483, 0.930, -2.509, -0.039 },
179
			{ 485, -0.889, 0.720, 0.019 },
180
			{ 486, -0.699, -3.170, 0.579 },
181
			{ 489, 1.159, -0.740, 0.000 },
182
			{ 490, 1.370, -1.250, 0.000 },
183
			{ 491, -1.070, -2.180, 0.000 },
184
			{ 492, -0.980, -2.240, 0.119 },
185
			{ 494, -1.019, -2.200, 0.119 },
186
			{ 495, 1.210, -1.909, -0.100 },
187
			{ 496, 1.059, -1.860, 0.150 },
188
			{ 498, -1.299, -0.009, 0.090 },
189
			{ 499, -1.110, -1.070, -0.349 },
190
			{ 500, -0.980, -1.710, -0.070 },
191
			{ 502, -1.080, -1.879, 0.140 },
192
			{ 503, -1.100, -2.049, 0.029 },
193
			{ 504, 0.000, -3.000, -0.129 },
194
			{ 504, -1.159, -1.830, 0.109 },
195
			{ 505, 1.159, -0.740, 0.000 },
196
			{ 506, 1.049, -1.110, -0.050 },
197
			{ 507, -1.169, -2.299, 0.109 },
198
			{ 508, -1.379, -3.049, -0.670 },
199
			{ 514, 1.429, 0.379, -0.649 },
200
			{ 515, -1.450, 0.479, -1.309 },
201
			{ 516, -1.100, -2.450, -0.029 },
202
			{ 517, -1.179, -1.950, 0.070 },
203
			{ 518, 1.210, -2.190, -0.070 },
204
			{ 521, 0.000, 0.129, 0.610 },
205
			{ 522, 0.000, 0.140, 0.610 },
206
			{ 523, 0.000, 0.150, 0.550 },
207
			{ 524, 1.529, 0.479, -0.990 },
208
			{ 525, -1.389, -0.509, -0.090 },
209
			{ 526, -0.990, -1.960, 0.059 },
210
			{ 527, -1.139, -1.690, 0.140 },
211
			{ 528, -1.090, -2.029, 0.119 },
212
			{ 529, -1.200, -2.220, 0.200 },
213
			{ 531, -0.009, 0.819, 0.430 },
214
			{ 533, 1.019, -1.960, 0.140 },
215
			{ 534, -1.039, -0.819, -0.200 },
216
			{ 535, -1.200, -0.560, 0.270 },
217
			{ 536, -1.070, -1.690, 0.090 },
218
			{ 540, -1.169, -2.519, -0.019 },
219
			{ 541, 1.009, -1.990, 0.150 },
220
			{ 542, -1.120, -1.919, 0.310 },
221
			{ 543, -1.100, -0.949, 0.000 },
222
			{ 544, -1.299, 2.069, 0.319 },
223
			{ 545, 0.000, -2.220, -0.319 },
224
			{ 546, 1.090, -2.029, 0.150 },
225
			{ 547, -1.169, -2.009, 0.119 },
226
			{ 549, -1.080, -1.179, 0.219 },
227
			{ 550, -1.070, -2.490, 0.039 },
228
			{ 551, -1.149, -2.670, 0.090 },
229
			{ 552, -1.289, -0.959, 0.490 },
230
			{ 554, 1.210, -2.390, 0.119 },
231
			{ 555, -0.790, -1.500, 0.180 },
232
			{ 557, 1.190, -2.569, 0.850 },
233
			{ 558, -1.090, -1.940, 0.270 },
234
			{ 559, -1.080, -1.710, 0.270 },
235
			{ 560, 1.139, -1.899, 0.129 },
236
			{ 561, 1.110, -2.299, 0.109 },
237
			{ 562, 1.039, -0.699, 0.070 },
238
			{ 565, 0.910, -0.870, 0.029 },
239
			{ 566, 1.080, -2.440, 0.019 },
240
			{ 567, 0.000, -2.859, -0.460 },
241
			{ 568, -0.500, -0.660, 0.379 },
242
			{ 571, 0.000, 0.189, 0.019 },
243
			{ 572, -0.379, -0.970, 0.159 },
244
			{ 573, -1.179, 0.479, -0.479 },
245
			{ 574, -0.750, -0.970, 0.280 },
246
			{ 575, 0.000, -2.779, -0.050 },
247
			{ 576, 0.000, -3.160, -0.250 },
248
			{ 578, -1.240, 2.910, -0.019 },
249
			{ 579, 1.220, -2.299, 0.170 },
250
			{ 580, 1.190, -1.820, 0.239 },
251
			{ 581, 0.000, 0.129, 0.540 },
252
			{ 582, -1.059, 0.140, -0.280 },
253
			{ 583, -0.759, 0.409, -0.059 },
254
			{ 584, 0.000, 0.000, 0.000 },
255
			{ 585, 1.139, -2.299, 0.200 },
256
			{ 587, -1.230, -1.220, 0.100 },
257
			{ 588, -1.460, -2.160, 0.219 },
258
			{ 589, 0.980, -0.889, 0.119 },
259
			{ 596, -1.110, -2.160, 0.100 },
260
			{ 597, -1.100, -2.150, 0.100 },
261
			{ 598, -1.080, -1.960, 0.159 },
262
			{ 599, 1.159, -0.740, 0.000 },
263
			{ 600, 1.090, -2.029, 0.079 },
264
			{ 601, -1.330, -1.690, 0.920 },
265
			{ 602, 1.090, -1.990, 0.109 },
266
			{ 603, 1.179, -2.190, -0.079 },
267
			{ 604, 0.000, -3.000, -0.129 },
268
			{ 605, -1.100, -0.949, 0.000 },
269
			{ 609, -1.299, 0.000, 0.100 }
270
		}
271
	;
272
	for(new i; i < sizeof(g_PetrolcapData); ++i)
273
	{
274
		if(g_PetrolcapData[i][e_ModelID] == modelID)
275
		{
276
			aimOffset_X = g_PetrolcapData[i][e_Offset_X];
277
			aimOffset_Y = g_PetrolcapData[i][e_Offset_Y];
278
			aimOffset_Z = g_PetrolcapData[i][e_Offset_Z];
279
			return 1;
280
		}
281
	}
282
	return 0;
283
}