SHOW:
|
|
- or go back to the newest paste.
1 | #include <a_samp> | |
2 | ||
3 | new Text:ServerTextDrawOne; | |
4 | new Text:ServerTextDrawTwo; | |
5 | new Text:ServerTextDrawThree[MAX_PLAYERS]; | |
6 | new Text:ServerTextDrawFour[MAX_PLAYERS]; | |
7 | new Text:ServerTextDrawFive[MAX_PLAYERS]; | |
8 | new ServerTimerOne; | |
9 | new ServerTimerTwo; | |
10 | new PlayerUseDriftCounter[MAX_PLAYERS]; | |
11 | new PlayerMoney[MAX_PLAYERS]; | |
12 | new PlayerScore[MAX_PLAYERS]; | |
13 | new PlayerCombo[MAX_PLAYERS]; | |
14 | new Float:PlayerPositionX[MAX_PLAYERS]; | |
15 | new Float:PlayerPositionY[MAX_PLAYERS]; | |
16 | new Float:PlayerPositionZ[MAX_PLAYERS]; | |
17 | new PlayerTimerOne[MAX_PLAYERS]; | |
18 | ||
19 | forward PlayerUpdate(); | |
20 | forward PlayerDrift(); | |
21 | forward PlayerDriftEnd(Player); | |
22 | ||
23 | Float:PlayerTheoreticAngle(Player) | |
24 | { | |
25 | new Float:X; | |
26 | new Float:Y; | |
27 | new Float:Z; | |
28 | GetVehiclePos(GetPlayerVehicleID(Player),X,Y,Z); | |
29 | new Float:NewX; | |
30 | if(X > PlayerPositionX[Player]) NewX = X - PlayerPositionX[Player]; | |
31 | if(X < PlayerPositionX[Player]) NewX = PlayerPositionX[Player] - X; | |
32 | new Float:NewY; | |
33 | if(Y > PlayerPositionY[Player]) NewY = Y - PlayerPositionY[Player]; | |
34 | if(Y < PlayerPositionY[Player]) NewY = PlayerPositionY[Player] - Y; | |
35 | new Float:Sinus; | |
36 | new Float:Cosinus; | |
37 | Cosinus = floatsqroot(floatpower(floatabs(floatsub(X,PlayerPositionX[Player])),2) + floatpower(floatabs(floatsub(Y,PlayerPositionY[Player])),2)); | |
38 | new Float:TheoreticAngle; | |
39 | if(PlayerPositionX[Player] > X && PlayerPositionY[Player] > Y) | |
40 | { | |
41 | Sinus = asin(NewX / Cosinus); | |
42 | TheoreticAngle = floatsub(floatsub(floatadd(Sinus,90),floatmul(Sinus,2)),-90.0); | |
43 | } | |
44 | if(PlayerPositionX[Player] > X && PlayerPositionY[Player] < Y) | |
45 | { | |
46 | Sinus = asin(NewX / Cosinus); | |
47 | TheoreticAngle = floatsub(floatadd(Sinus,180),180.0); | |
48 | } | |
49 | if(PlayerPositionX[Player] < X && PlayerPositionY[Player] < Y) | |
50 | { | |
51 | Sinus = acos(NewY / Cosinus); | |
52 | TheoreticAngle = floatsub(floatadd(Sinus,360),floatmul(Sinus,2)); | |
53 | } | |
54 | if(PlayerPositionX[Player] < X && PlayerPositionY[Player] > Y) | |
55 | { | |
56 | Sinus = asin(NewX / Cosinus); | |
57 | TheoreticAngle = floatadd(Sinus,180); | |
58 | } | |
59 | if(TheoreticAngle == 0.0) GetVehicleZAngle(GetPlayerVehicleID(Player),TheoreticAngle); | |
60 | return TheoreticAngle; | |
61 | } | |
62 | ||
63 | stock VehicleIsCar(Vehicle) | |
64 | { | |
65 | switch(GetVehicleModel(Vehicle)) | |
66 | { | |
67 | case 480: return 1; | |
68 | case 533: return 1; | |
69 | case 439: return 1; | |
70 | case 555: return 1; | |
71 | case 536: return 1; | |
72 | case 575: return 1; | |
73 | case 534: return 1; | |
74 | case 567: return 1; | |
75 | case 535: return 1; | |
76 | case 566: return 1; | |
77 | case 576: return 1; | |
78 | case 412: return 1; | |
79 | case 445: return 1; | |
80 | case 504: return 1; | |
81 | case 401: return 1; | |
82 | case 518: return 1; | |
83 | case 527: return 1; | |
84 | case 542: return 1; | |
85 | case 507: return 1; | |
86 | case 562: return 1; | |
87 | case 585: return 1; | |
88 | case 419: return 1; | |
89 | case 526: return 1; | |
90 | case 604: return 1; | |
91 | case 466: return 1; | |
92 | case 492: return 1; | |
93 | case 474: return 1; | |
94 | case 546: return 1; | |
95 | case 517: return 1; | |
96 | case 410: return 1; | |
97 | case 551: return 1; | |
98 | case 516: return 1; | |
99 | case 467: return 1; | |
100 | case 426: return 1; | |
101 | case 436: return 1; | |
102 | case 547: return 1; | |
103 | case 405: return 1; | |
104 | case 580: return 1; | |
105 | case 560: return 1; | |
106 | case 550: return 1; | |
107 | case 549: return 1; | |
108 | case 540: return 1; | |
109 | case 491: return 1; | |
110 | case 529: return 1; | |
111 | case 421: return 1; | |
112 | case 602: return 1; | |
113 | case 429: return 1; | |
114 | case 496: return 1; | |
115 | case 402: return 1; | |
116 | case 541: return 1; | |
117 | case 415: return 1; | |
118 | case 589: return 1; | |
119 | case 587: return 1; | |
120 | case 565: return 1; | |
121 | case 494: return 1; | |
122 | case 502: return 1; | |
123 | case 503: return 1; | |
124 | case 411: return 1; | |
125 | case 559: return 1; | |
126 | case 603: return 1; | |
127 | case 475: return 1; | |
128 | case 506: return 1; | |
129 | case 451: return 1; | |
130 | case 558: return 1; | |
131 | case 477: return 1; | |
132 | case 418: return 1; | |
133 | case 404: return 1; | |
134 | case 479: return 1; | |
135 | case 458: return 1; | |
136 | case 561: return 1; | |
137 | } | |
138 | return 0; | |
139 | } | |
140 | ||
141 | stock VehicleSpeed(Vehicle) | |
142 | { | |
143 | new Float:X; | |
144 | new Float:Y; | |
145 | new Float:Z; | |
146 | GetVehicleVelocity(Vehicle,X,Y,Z); | |
147 | new Float:Speed; | |
148 | Speed = floatsqroot(floatpower(floatabs(X),2.0) + floatpower(floatabs(Y),2.0) + floatpower(floatabs(Z),2.0)) * 200.0; | |
149 | return floatround(Speed); | |
150 | } | |
151 | ||
152 | public OnFilterScriptInit() | |
153 | { | |
154 | ServerTextDrawOne = TextDrawCreate(320.000000,250.000000,"-"); | |
155 | TextDrawAlignment(ServerTextDrawOne,2); | |
156 | TextDrawBackgroundColor(ServerTextDrawOne,80); | |
157 | TextDrawFont(ServerTextDrawOne,1); | |
158 | TextDrawLetterSize(ServerTextDrawOne,15.000000,30.000000); | |
159 | TextDrawColor(ServerTextDrawOne,80); | |
160 | TextDrawSetOutline(ServerTextDrawOne,0); | |
161 | TextDrawSetProportional(ServerTextDrawOne,1); | |
162 | TextDrawSetShadow(ServerTextDrawOne,1); | |
163 | ServerTextDrawTwo = TextDrawCreate(320.000000,395.000000,"~W~~H~Licznik Driftu"); | |
164 | TextDrawAlignment(ServerTextDrawTwo,2); | |
165 | TextDrawBackgroundColor(ServerTextDrawTwo,255); | |
166 | TextDrawFont(ServerTextDrawTwo,3); | |
167 | TextDrawLetterSize(ServerTextDrawTwo,0.500000,1.000000); | |
168 | TextDrawColor(ServerTextDrawTwo,-1); | |
169 | TextDrawSetOutline(ServerTextDrawTwo,1); | |
170 | TextDrawSetProportional(ServerTextDrawTwo,1); | |
171 | for(new Player; Player < GetMaxPlayers(); Player++) | |
172 | { | |
173 | ServerTextDrawThree[Player] = TextDrawCreate(250.000000,405.000000," "); | |
174 | TextDrawBackgroundColor(ServerTextDrawThree[Player],255); | |
175 | TextDrawFont(ServerTextDrawThree[Player],2); | |
176 | TextDrawLetterSize(ServerTextDrawThree[Player],0.200000,1.000000); | |
177 | TextDrawColor(ServerTextDrawThree[Player],-1); | |
178 | TextDrawSetOutline(ServerTextDrawThree[Player],1); | |
179 | TextDrawSetProportional(ServerTextDrawThree[Player],1); | |
180 | ServerTextDrawFour[Player] = TextDrawCreate(250.000000,415.000000," "); | |
181 | TextDrawBackgroundColor(ServerTextDrawFour[Player],255); | |
182 | TextDrawFont(ServerTextDrawFour[Player],2); | |
183 | TextDrawLetterSize(ServerTextDrawFour[Player],0.200000,1.000000); | |
184 | TextDrawColor(ServerTextDrawFour[Player],-1); | |
185 | TextDrawSetOutline(ServerTextDrawFour[Player],1); | |
186 | TextDrawSetProportional(ServerTextDrawFour[Player],1); | |
187 | ServerTextDrawFive[Player] = TextDrawCreate(250.000000,425.000000," "); | |
188 | TextDrawBackgroundColor(ServerTextDrawFive[Player],255); | |
189 | TextDrawFont(ServerTextDrawFive[Player],2); | |
190 | TextDrawLetterSize(ServerTextDrawFive[Player],0.200000,1.000000); | |
191 | TextDrawColor(ServerTextDrawFive[Player],-1); | |
192 | TextDrawSetOutline(ServerTextDrawFive[Player],1); | |
193 | TextDrawSetProportional(ServerTextDrawFive[Player],1); | |
194 | } | |
195 | ServerTimerOne = SetTimer("PlayerUpdate",1000,1); | |
196 | ServerTimerTwo = SetTimer("PlayerDrift",500,1); | |
197 | return 1; | |
198 | } | |
199 | ||
200 | public OnFilterScriptExit() | |
201 | { | |
202 | TextDrawDestroy(ServerTextDrawOne); | |
203 | TextDrawDestroy(ServerTextDrawTwo); | |
204 | for(new Player; Player < GetMaxPlayers(); Player++) | |
205 | { | |
206 | TextDrawDestroy(ServerTextDrawThree[Player]); | |
207 | TextDrawDestroy(ServerTextDrawFour[Player]); | |
208 | TextDrawDestroy(ServerTextDrawFive[Player]); | |
209 | } | |
210 | KillTimer(ServerTimerOne); | |
211 | KillTimer(ServerTimerTwo); | |
212 | return 1; | |
213 | } | |
214 | ||
215 | public OnPlayerConnect(playerid) | |
216 | { | |
217 | TextDrawHideForPlayer(playerid,ServerTextDrawOne); | |
218 | TextDrawHideForPlayer(playerid,ServerTextDrawTwo); | |
219 | TextDrawHideForPlayer(playerid,ServerTextDrawThree[playerid]); | |
220 | TextDrawHideForPlayer(playerid,ServerTextDrawFour[playerid]); | |
221 | TextDrawHideForPlayer(playerid,ServerTextDrawFive[playerid]); | |
222 | TextDrawSetString(ServerTextDrawThree[playerid]," "); | |
223 | TextDrawSetString(ServerTextDrawFour[playerid]," "); | |
224 | TextDrawSetString(ServerTextDrawFive[playerid]," "); | |
225 | PlayerUseDriftCounter[playerid] = 1; | |
226 | PlayerMoney[playerid] = 0; | |
227 | PlayerScore[playerid] = 0; | |
228 | PlayerCombo[playerid] = 1; | |
229 | PlayerPositionX[playerid] = 0.0; | |
230 | PlayerPositionY[playerid] = 0.0; | |
231 | PlayerPositionZ[playerid] = 0.0; | |
232 | KillTimer(PlayerTimerOne[playerid]); | |
233 | return 1; | |
234 | } | |
235 | ||
236 | public OnPlayerDisconnect(playerid) | |
237 | { | |
238 | TextDrawHideForPlayer(playerid,ServerTextDrawOne); | |
239 | TextDrawHideForPlayer(playerid,ServerTextDrawTwo); | |
240 | TextDrawHideForPlayer(playerid,ServerTextDrawThree[playerid]); | |
241 | TextDrawHideForPlayer(playerid,ServerTextDrawFour[playerid]); | |
242 | TextDrawHideForPlayer(playerid,ServerTextDrawFive[playerid]); | |
243 | TextDrawSetString(ServerTextDrawThree[playerid]," "); | |
244 | TextDrawSetString(ServerTextDrawFour[playerid]," "); | |
245 | TextDrawSetString(ServerTextDrawFive[playerid]," "); | |
246 | PlayerUseDriftCounter[playerid] = 1; | |
247 | PlayerMoney[playerid] = 0; | |
248 | PlayerScore[playerid] = 0; | |
249 | PlayerCombo[playerid] = 1; | |
250 | PlayerPositionX[playerid] = 0.0; | |
251 | PlayerPositionY[playerid] = 0.0; | |
252 | PlayerPositionZ[playerid] = 0.0; | |
253 | KillTimer(PlayerTimerOne[playerid]); | |
254 | return 1; | |
255 | } | |
256 | ||
257 | public OnPlayerCommandText(playerid,cmdtext[]) | |
258 | - | if(IsPlayerConnected(Player) && GetPlayerState(Player) == PLAYER_STATE_DRIVER && VehicleIsCar(GetPlayerVehicleID(Player))) GetVehiclePos(GetPlayerVehicleID(Player),PlayerPositionX[Player],PlayerPositionY[Player],PlayerPositionZ[Player]); |
258 | + | |
259 | if(!strcmp(cmdtext,"/LicznikDriftu",true)) | |
260 | { | |
261 | if(PlayerUseDriftCounter[playerid] == 0) PlayerUseDriftCounter[playerid] = 1 & SendClientMessage(playerid,0x00FF00FF,"Licznik driftu został włączony."); | |
262 | else PlayerUseDriftCounter[playerid] = 0 & SendClientMessage(playerid,0x00FF00FF,"Licznik driftu został wyłączony.") & CallLocalFunction("PlayerDriftEnd","d",playerid); | |
263 | return 1; | |
264 | } | |
265 | return 0; | |
266 | } | |
267 | - | if(IsPlayerConnected(Player) && GetPlayerState(Player) == PLAYER_STATE_DRIVER && VehicleIsCar(GetPlayerVehicleID(Player))) |
267 | + | |
268 | public PlayerUpdate() | |
269 | { | |
270 | for(new Player; Player < GetMaxPlayers(); Player++) | |
271 | { | |
272 | if(IsPlayerConnected(Player) && GetPlayerState(Player) == PLAYER_STATE_DRIVER && VehicleIsCar(GetPlayerVehicleID(Player)) && PlayerUseDriftCounter[Player] == 1) GetVehiclePos(GetPlayerVehicleID(Player),PlayerPositionX[Player],PlayerPositionY[Player],PlayerPositionZ[Player]); | |
273 | } | |
274 | return 1; | |
275 | } | |
276 | ||
277 | public PlayerDrift() | |
278 | { | |
279 | for(new Player; Player < GetMaxPlayers(); Player++) | |
280 | { | |
281 | if(IsPlayerConnected(Player) && GetPlayerState(Player) == PLAYER_STATE_DRIVER && VehicleIsCar(GetPlayerVehicleID(Player)) && PlayerUseDriftCounter[Player] == 1) | |
282 | { | |
283 | new Float:Angle; | |
284 | GetVehicleZAngle(GetPlayerVehicleID(Player),Angle); | |
285 | if(floatabs(floatsub(Angle,PlayerTheoreticAngle(Player))) < 90.0 && floatabs(floatsub(Angle,PlayerTheoreticAngle(Player))) > 10.0 && VehicleSpeed(GetPlayerVehicleID(Player)) < 300 && VehicleSpeed(GetPlayerVehicleID(Player)) > 30) | |
286 | { | |
287 | if(PlayerMoney[Player] == 0 && PlayerScore[Player] == 0 && PlayerCombo[Player] == 1) | |
288 | { | |
289 | TextDrawShowForPlayer(Player,ServerTextDrawOne); | |
290 | TextDrawShowForPlayer(Player,ServerTextDrawTwo); | |
291 | TextDrawShowForPlayer(Player,ServerTextDrawThree[Player]); | |
292 | TextDrawShowForPlayer(Player,ServerTextDrawFour[Player]); | |
293 | TextDrawShowForPlayer(Player,ServerTextDrawFive[Player]); | |
294 | TextDrawSetString(ServerTextDrawThree[Player]," "); | |
295 | TextDrawSetString(ServerTextDrawFour[Player]," "); | |
296 | TextDrawSetString(ServerTextDrawFive[Player]," "); | |
297 | } | |
298 | PlayerMoney[Player] += floatround(floatabs(floatsub(Angle,PlayerTheoreticAngle(Player))) * (VehicleSpeed(GetPlayerVehicleID(Player)) * 0.1)) / 10; | |
299 | PlayerScore[Player] += floatround(floatabs(floatsub(Angle,PlayerTheoreticAngle(Player))) * 3 * (VehicleSpeed(GetPlayerVehicleID(Player)) * 0.1)) / 10; | |
300 | PlayerCombo[Player] = PlayerScore[Player] / 1000; | |
301 | if(PlayerCombo[Player] < 1) PlayerCombo[Player] = 1; | |
302 | new String[100]; | |
303 | format(String,sizeof(String),"~R~~H~Pieniadze Za Drift: ~W~~H~%d$",PlayerMoney[Player]); | |
304 | TextDrawSetString(ServerTextDrawThree[Player],String); | |
305 | format(String,sizeof(String),"~R~~H~Punkty Za Drift: ~W~~H~%d",PlayerScore[Player]); | |
306 | TextDrawSetString(ServerTextDrawFour[Player],String); | |
307 | format(String,sizeof(String),"~R~~H~Kombo: ~W~~H~X%d",PlayerCombo[Player]); | |
308 | TextDrawSetString(ServerTextDrawFive[Player],String); | |
309 | KillTimer(PlayerTimerOne[Player]); | |
310 | PlayerTimerOne[Player] = SetTimerEx("PlayerDriftEnd",3000,0,"d",Player); | |
311 | } | |
312 | } | |
313 | } | |
314 | return 1; | |
315 | } | |
316 | ||
317 | public PlayerDriftEnd(Player) | |
318 | { | |
319 | TextDrawHideForPlayer(Player,ServerTextDrawOne); | |
320 | TextDrawHideForPlayer(Player,ServerTextDrawTwo); | |
321 | TextDrawHideForPlayer(Player,ServerTextDrawThree[Player]); | |
322 | TextDrawHideForPlayer(Player,ServerTextDrawFour[Player]); | |
323 | TextDrawHideForPlayer(Player,ServerTextDrawFive[Player]); | |
324 | TextDrawSetString(ServerTextDrawThree[Player]," "); | |
325 | TextDrawSetString(ServerTextDrawFour[Player]," "); | |
326 | TextDrawSetString(ServerTextDrawFive[Player]," "); | |
327 | GivePlayerMoney(Player,PlayerMoney[Player]); | |
328 | SetPlayerScore(Player,GetPlayerScore(Player) + PlayerScore[Player] * PlayerCombo[Player]); | |
329 | PlayerMoney[Player] = 0; | |
330 | PlayerScore[Player] = 0; | |
331 | PlayerCombo[Player] = 1; | |
332 | return 1; | |
333 | } |