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 | } |