SHOW:
|
|
- or go back to the newest paste.
1 | /* | |
2 | - | iParachute v0.1 |
2 | + | By [DOG]irinel1996, special thanks to RyDeR` for Map Andreas include version. |
3 | - | By irinel1996 |
3 | + | Official thread: http://forum.sa-mp.com/showthread.php?t=356826 |
4 | - | Thanks to FireCat too |
4 | + | |
5 | #include <mapandreas> | |
6 | ||
7 | #define TOTAL_ANIMS (10) | |
8 | ||
9 | forward OnPlayerOpenParachute(playerid, altitude); | |
10 | - | new idx=GetPlayerAnimationIndex(playerid); |
10 | + | |
11 | - | if(idx==1134||idx==961||idx==962||idx==958||idx==959|| |
11 | + | new |
12 | - | idx==971||idx==963||idx==976||idx==978||idx==965) return 1; |
12 | + | gAnims_Skydive[TOTAL_ANIMS] = { |
13 | - | return 0; |
13 | + | 958, 959, 961, 962, |
14 | 963, 965, 971, 976, | |
15 | 978, 1134 | |
16 | }; | |
17 | - | new idx=GetPlayerAnimationIndex(playerid); |
17 | + | |
18 | - | if(idx==963||idx==976||idx==978||idx==965) return 1; //Opened |
18 | + | new |
19 | - | else if(idx==971) return 2; //Opening |
19 | + | bool:gLock_Callback[MAX_PLAYERS]; |
20 | - | return 0; //Closed |
20 | + | |
21 | stock IsPlayerSkyDiving(playerid) | |
22 | - | stock GetPlayerAltitude(playerid, tipo=0) |
22 | + | |
23 | for (new idx = 0; idx < TOTAL_ANIMS; idx++) { | |
24 | - | new Float:x,Float:y,Float:z; |
24 | + | if (GetPlayerAnimationIndex(playerid) == gAnims_Skydive[idx]) { |
25 | - | switch(tipo) |
25 | + | return 1; |
26 | } | |
27 | - | case 0: |
27 | + | |
28 | return 0; | |
29 | - | if(IsPlayerSkyDiving(playerid)) |
29 | + | |
30 | ||
31 | - | GetPlayerPos(playerid,x,y,z); |
31 | + | |
32 | - | new Float:r=GetPointZPos(x,y); |
32 | + | |
33 | - | new Float:r2 = z-r; |
33 | + | new |
34 | - | return floatround(r2,floatround_round); |
34 | + | idx = GetPlayerAnimationIndex(playerid); |
35 | ||
36 | if (idx == gAnims_Skydive[4] || idx == gAnims_Skydive[5] || idx == gAnims_Skydive[7] || idx == gAnims_Skydive[8]) { | |
37 | - | case 1: |
37 | + | return 1; |
38 | } else if (idx == gAnims_Skydive[6]) { | |
39 | - | GetPlayerPos(playerid,x,y,z); |
39 | + | return 2; |
40 | - | new Float:r=GetPointZPos(x,y); |
40 | + | } else { |
41 | - | new Float:r2 = z-r; |
41 | + | return 0; |
42 | - | return floatround(r2,floatround_round); |
42 | + | |
43 | } | |
44 | ||
45 | - | return 0; |
45 | + | stock GetPlayerAltitude(playerid) |
46 | { | |
47 | new Float:Pos[3]; | |
48 | GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]); | |
49 | - | if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT){ |
49 | + | |
50 | - | if(GetPlayerWeapon(playerid) == 46){ |
50 | + | new |
51 | - | if(newkeys & KEY_FIRE){ |
51 | + | Float:ground = GetPointZPos(Pos[0], Pos[1]), |
52 | - | if(GetPlayerParachuteState(playerid) == 0 || GetPlayerParachuteState(playerid) == 2){ |
52 | + | Float:altitude = (Pos[2] - ground) |
53 | - | CallLocalFunction("OnPlayerOpenParachute","dd",playerid,GetPlayerAltitude(playerid,1)); |
53 | + | ; |
54 | - | } } } } |
54 | + | |
55 | - | CallLocalFunction("isd_OnPlayerKeyStateChange","iii",playerid,newkeys,oldkeys); |
55 | + | return floatround(altitude, floatround_round); |
56 | } | |
57 | - | #if defined _ALS_OnPlayerKeyStateChange |
57 | + | |
58 | - | #undef OnPlayerKeyStateChange |
58 | + | public OnPlayerUpdate(playerid) |
59 | - | #else |
59 | + | |
60 | - | #define _ALS_OnPlayerKeyStateChange |
60 | + | if (gLock_Callback[playerid]) { |
61 | if (GetPlayerParachuteState(playerid) != 0 && IsPlayerSkyDiving(playerid)) | |
62 | - | #define OnPlayerKeyStateChange isd_OnPlayerKeyStateChange |
62 | + | gLock_Callback[playerid] = false; |
63 | - | forward OnPlayerKeyStateChange(playerid, newkeys, oldkeys); |
63 | + | |
64 | #if defined khJGcUybTx | |
65 | return khJGcUybTx(playerid); | |
66 | #else | |
67 | return true; | |
68 | #endif | |
69 | } | |
70 | ||
71 | #define OnPlayerUpdate khJGcUybTx | |
72 | ||
73 | #if defined khJGcUybTx | |
74 | forward OnPlayerUpdate(playerid); | |
75 | #endif | |
76 | ||
77 | //---------------------------------------------------// | |
78 | ||
79 | public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) | |
80 | { | |
81 | if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) | |
82 | { | |
83 | if(GetPlayerWeapon(playerid) == 46) | |
84 | { | |
85 | if(newkeys & KEY_FIRE) | |
86 | { | |
87 | if(GetPlayerParachuteState(playerid) == 0) { | |
88 | if (!gLock_Callback[playerid]) { | |
89 | gLock_Callback[playerid] = true; | |
90 | CallLocalFunction("OnPlayerOpenParachute", "dd", playerid, GetPlayerAltitude(playerid)); | |
91 | } | |
92 | } | |
93 | } | |
94 | } | |
95 | } | |
96 | ||
97 | #if defined YxTcODfbXm | |
98 | return YxTcODfbXm(playerid, newkeys, oldkeys); | |
99 | #else | |
100 | return true; | |
101 | #endif | |
102 | } | |
103 | ||
104 | #define OnPlayerKeyStateChange YxTcODfbXm | |
105 | ||
106 | #if defined YxTcODfbXm | |
107 | forward OnPlayerKeyStateChange(playerid, newkeys, oldkeys); | |
108 | #endif |