View difference between Paste ID: URDJNtib and sv1j6xWw
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
}