View difference between Paste ID: 1zcZ6RTH and bWFpMZbk
SHOW: | | - or go back to the newest paste.
1
#define 	FILTERSCRIPT
2
#include 	<a_samp>
3
#include    <izcmd>
4
5
#define     CM_EVENT_TIME       (120)   // event time, in seconds (default: 120)
6
#define     CM_MIN_PLAYERS      (2)     // players required to start the event (default: 2)
7
#define     CM_MAX_PLAYERS      (16)    // max players allowed to join (default: 16)
8
#define     CM_SETUP_TIME       (15)    // setup time where players can join, in seconds (default: 15)
9
#define     CM_REWARD           (5000)  // how much money the winner will get (default: 5000)
10
#define     CM_SEPERATE                 // prevents player following by moving every player to a different virtual world, comment or remove this line if you don't want it
11
#define     CM_USEFENCES                // creates fences around the arena, comment or remove this line if you don't want it
12
13
enum    _:E_OBJECTID
14
{
15
	OBJ_ORANGE,
16
	OBJ_RED,
17
	OBJ_GREEN,
18
	OBJ_YELLOW,
19
	OBJ_PURPLE,
20
	OBJ_PINK,
21
	OBJ_MAROON,
22
	OBJ_BLUE,
23
	OBJ_WHITE
24
}
25
26
enum    _:E_GAMESTAGE
27
{
28
	STAGE_NONE,
29
	STAGE_SETUP,
30
	STAGE_PLAYING
31
}
32
33
new
34
	ColorMatchObjects[9] = {INVALID_OBJECT_ID, ...},
35
	ColorMatchNames[9][7] = {"Orange", "Red", "Green", "Yellow", "Purple", "Pink", "Maroon", "Blue", "White"},
36
	ColorMatchColors[9] = {0xFF7F00FF, 0xEE0000FF, 0x00EE00FF, 0xFFFF00FF, 0x9B30FFFF, 0xFF1493FF, 0x8B1A1AFF, 0x1E90FFFF, 0xFFFFFFFF};
37
	
38
#if defined CM_USEFENCES
39
new
40
	ColorMatchFences[8] = {INVALID_OBJECT_ID, ...};
41
#endif
42
43
new
44
    ColorMatchCurrent = -1,
45
    ColorMatchPlayers,
46
    ColorMatchTimer = -1,
47
    ColorMatchFallTimer = -1,
48
    ColorMatchEventTimer = -1,
49
    ColorMatchStage = STAGE_NONE,
50
    Text: ColorMatchTD;
51
	
52
new
53
	bool: InCMEvent[MAX_PLAYERS],
54
	PlayerText: ColorText[MAX_PLAYERS] = {PlayerText: INVALID_TEXT_DRAW, ...};
55
56
// http://forum.sa-mp.com/showpost.php?p=3117531&postcount=5
57
RGBAToARGB(rgba)
58
    return rgba >>> 8 | rgba << 24;
59
60
// http://forum.sa-mp.com/showpost.php?p=1120652&postcount=3
61
Float: frandom(Float:max, Float:min = 0.0, dp = 4)
62
{
63
	new
64
		Float:mul = floatpower(10.0, dp),
65
		imin = floatround(min * mul),
66
		imax = floatround(max * mul);
67
	return float(random(imax - imin) + imin) / mul;
68
}
69
70
// http://forum.sa-mp.com/showpost.php?p=3223897&postcount=11
71
ConvertToMinutes(time)
72
{
73
    new string[15];//-2000000000:00 could happen, so make the string 15 chars to avoid any errors
74
    format(string, sizeof(string), "%02d:%02d", time / 60, time % 60);
75
    return string;
76
}
77
78
ColorMatch_Arena()
79
{
80
    for(new i; i < sizeof(ColorMatchObjects); i++) DestroyObject(ColorMatchObjects[i]);
81
    
82
    ColorMatchObjects[OBJ_ORANGE] = CreateObject(19353, 2005.390, 3866.277, 101.323, 0.000, 90.000, 90.000); //  orange
83
	SetObjectMaterial(ColorMatchObjects[OBJ_ORANGE], 0, 18996, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_ORANGE]));
84
85
	ColorMatchObjects[OBJ_RED] = CreateObject(19353, 2008.590, 3866.277, 101.323, 0.000, 90.000, 90.000); // red
86
	SetObjectMaterial(ColorMatchObjects[OBJ_RED], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_RED]));
87
88
	ColorMatchObjects[OBJ_GREEN] = CreateObject(19353, 2002.190, 3866.277, 101.323, 0.000, 90.000, 90.000); // green
89
	SetObjectMaterial(ColorMatchObjects[OBJ_GREEN], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_GREEN]));
90
91
	ColorMatchObjects[OBJ_YELLOW] = CreateObject(19353, 2008.590, 3862.777, 101.323, 0.000, 90.000, 90.000); // yellow
92
	SetObjectMaterial(ColorMatchObjects[OBJ_YELLOW], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_YELLOW]));
93
94
	ColorMatchObjects[OBJ_PURPLE] = CreateObject(19353, 2008.590, 3869.777, 101.323, 0.000, 90.000, 90.000); // purple
95
	SetObjectMaterial(ColorMatchObjects[OBJ_PURPLE], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_PURPLE]));
96
97
	ColorMatchObjects[OBJ_PINK] = CreateObject(19353, 2005.390, 3862.777, 101.323, 0.000, 90.000, 90.000); // pink
98
	SetObjectMaterial(ColorMatchObjects[OBJ_PINK], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_PINK]));
99
100
	ColorMatchObjects[OBJ_MAROON] = CreateObject(19353, 2005.390, 3869.777, 101.323, 0.000, 90.000, 90.000); // maroon
101
	SetObjectMaterial(ColorMatchObjects[OBJ_MAROON], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_MAROON]));
102
103
	ColorMatchObjects[OBJ_BLUE] = CreateObject(19353, 2002.190, 3869.777, 101.323, 0.000, 90.000, 90.000); // blue
104
	SetObjectMaterial(ColorMatchObjects[OBJ_BLUE], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_BLUE]));
105
106
	ColorMatchObjects[OBJ_WHITE] = CreateObject(19353, 2002.190, 3862.777, 101.323, 0.000, 90.000, 90.000); // white
107
	SetObjectMaterial(ColorMatchObjects[OBJ_WHITE], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_WHITE]));
108
	
109
	#if defined CM_USEFENCES
110
	for(new i; i < sizeof(ColorMatchFences); i++) DestroyObject(ColorMatchFences[i]);
111
	
112
	ColorMatchFences[0] = CreateObject(8674, 2005.395, 3871.529, 102.859, 0.000, 0.000, 0.000);
113
	ColorMatchFences[1] = CreateObject(8674, 2000.584, 3866.285, 102.859, 0.000, 0.000, 90.000);
114
	ColorMatchFences[2] = CreateObject(8674, 2010.208, 3866.285, 102.859, 0.000, 0.000, 90.000);
115
	ColorMatchFences[3] = CreateObject(8674, 2005.395, 3861.021, 102.859, 0.000, 0.000, 0.000);
116
	
117
	ColorMatchFences[4] = CreateObject(8674, 2005.395, 3871.529, 105.809, 0.000, 0.000, 0.000);
118
	ColorMatchFences[5] = CreateObject(8674, 2000.584, 3866.285, 105.809, 0.000, 0.000, 90.000);
119
	ColorMatchFences[6] = CreateObject(8674, 2010.208, 3866.285, 105.809, 0.000, 0.000, 90.000);
120
	ColorMatchFences[7] = CreateObject(8674, 2005.395, 3861.021, 105.809, 0.000, 0.000, 0.000);
121
	#endif
122
	return 1;
123
}
124
125
ColorMatch_CleanUp(players = 0)
126
{
127
    KillTimer(ColorMatchTimer);
128
	KillTimer(ColorMatchFallTimer);
129
	KillTimer(ColorMatchEventTimer);
130
	ColorMatchStage = STAGE_NONE;
131
	ColorMatchPlayers = 0;
132
	ColorMatchTimer = -1;
133
	ColorMatchFallTimer = -1;
134
	ColorMatchEventTimer = -1;
135
	
136
	if(players)
137
	{
138
	    for(new i, mp = GetPlayerPoolSize(); i <= mp; i++)
139
		{
140
			if(!IsPlayerConnected(i) || !InCMEvent[i]) continue;
141
			InCMEvent[i] = false;
142
			PlayerTextDrawHide(i, ColorText[i]);
143
			TextDrawHideForPlayer(i, ColorMatchTD);
144
			SetPlayerVirtualWorld(i, 0);
145
			SpawnPlayer(i);
146
		}
147
	}
148
149
	return 1;
150
}
151
152
ColorMatch_InitPlayer(playerid)
153
{
154
    InCMEvent[playerid] = false;
155
156
    ColorText[playerid] = CreatePlayerTextDraw(playerid,317.000000, 150.000000, "_");
157
	PlayerTextDrawAlignment(playerid,ColorText[playerid], 2);
158
	PlayerTextDrawBackgroundColor(playerid,ColorText[playerid], 255);
159
	PlayerTextDrawFont(playerid,ColorText[playerid], 2);
160
	PlayerTextDrawLetterSize(playerid,ColorText[playerid], 0.700000, 3.000000);
161
	PlayerTextDrawColor(playerid,ColorText[playerid], -1);
162
	PlayerTextDrawSetOutline(playerid,ColorText[playerid], 1);
163
	PlayerTextDrawSetProportional(playerid,ColorText[playerid], 1);
164
	PlayerTextDrawSetSelectable(playerid,ColorText[playerid], 0);
165
	return 1;
166
}
167
168
ColorMatch_Eliminate(playerid)
169
{
170
	if(!InCMEvent[playerid]) return 1;
171
	TextDrawHideForPlayer(playerid, ColorMatchTD);
172
	PlayerTextDrawHide(playerid, ColorText[playerid]);
173
	SetPlayerVirtualWorld(playerid, 0);
174
	SpawnPlayer(playerid);
175
	ColorMatchPlayers--;
176
	
177
	new string[144], name[MAX_PLAYER_NAME];
178
	GetPlayerName(playerid, name, MAX_PLAYER_NAME);
179
	format(string, sizeof(string), "[COLORMATCH] {FFFFFF}%s(%d) got eliminated. Players Left: {F1C40F}%d", name, playerid, ColorMatchPlayers);
180
	for(new i, mp = GetPlayerPoolSize(); i <= mp; i++)
181
	{
182
		if(!IsPlayerConnected(i) || !InCMEvent[i]) continue;
183
		SendClientMessage(i, 0x3498DBFF, string);
184
	}
185
	
186
	InCMEvent[playerid] = false;
187
	
188
	if(ColorMatchStage == STAGE_PLAYING)
189
	{
190
	    if(ColorMatchPlayers < 2)
191
	    {
192
	        new winner = INVALID_PLAYER_ID;
193
	        for(new i, mp = GetPlayerPoolSize(); i <= mp; i++)
194
			{
195
				if(!IsPlayerConnected(i) || !InCMEvent[i]) continue;
196
				winner = i;
197
				break;
198
			}
199
			
200
			if(IsPlayerConnected(winner))
201
			{
202
			    GetPlayerName(winner, name, MAX_PLAYER_NAME);
203
			    format(string, sizeof(string), "[COLORMATCH] {FFFFFF}%s(%d) has won the event!", name, winner);
204
			    SendClientMessageToAll(0x3498DBFF, string);
205
			    GivePlayerMoney(winner, CM_REWARD);
206
			}
207
			
208
			SendClientMessageToAll(0x3498DBFF, "[COLORMATCH] {FFFFFF}Event ended.");
209
			ColorMatch_CleanUp(1);
210
	    }
211
	}
212
	
213
	return 1;
214
}
215
216
public OnFilterScriptInit()
217
{
218
	ColorMatchObjects[OBJ_ORANGE] = CreateObject(19353, 2005.390, 3866.277, 101.323, 0.000, 90.000, 90.000); //  orange
219
	SetObjectMaterial(ColorMatchObjects[OBJ_ORANGE], 0, 18996, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_ORANGE]));
220
	
221
	ColorMatchObjects[OBJ_RED] = CreateObject(19353, 2008.590, 3866.277, 101.323, 0.000, 90.000, 90.000); // red
222
	SetObjectMaterial(ColorMatchObjects[OBJ_RED], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_RED]));
223
	
224
	ColorMatchObjects[OBJ_GREEN] = CreateObject(19353, 2002.190, 3866.277, 101.323, 0.000, 90.000, 90.000); // green
225
	SetObjectMaterial(ColorMatchObjects[OBJ_GREEN], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_GREEN]));
226
	
227
	ColorMatchObjects[OBJ_YELLOW] = CreateObject(19353, 2008.590, 3862.777, 101.323, 0.000, 90.000, 90.000); // yellow
228
	SetObjectMaterial(ColorMatchObjects[OBJ_YELLOW], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_YELLOW]));
229
	
230
	ColorMatchObjects[OBJ_PURPLE] = CreateObject(19353, 2008.590, 3869.777, 101.323, 0.000, 90.000, 90.000); // purple
231
	SetObjectMaterial(ColorMatchObjects[OBJ_PURPLE], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_PURPLE]));
232
233
	ColorMatchObjects[OBJ_PINK] = CreateObject(19353, 2005.390, 3862.777, 101.323, 0.000, 90.000, 90.000); // pink
234
	SetObjectMaterial(ColorMatchObjects[OBJ_PINK], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_PINK]));
235
	
236
	ColorMatchObjects[OBJ_MAROON] = CreateObject(19353, 2005.390, 3869.777, 101.323, 0.000, 90.000, 90.000); // maroon
237
	SetObjectMaterial(ColorMatchObjects[OBJ_MAROON], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_MAROON]));
238
	
239
	ColorMatchObjects[OBJ_BLUE] = CreateObject(19353, 2002.190, 3869.777, 101.323, 0.000, 90.000, 90.000); // blue
240
	SetObjectMaterial(ColorMatchObjects[OBJ_BLUE], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_BLUE]));
241
242
	ColorMatchObjects[OBJ_WHITE] = CreateObject(19353, 2002.190, 3862.777, 101.323, 0.000, 90.000, 90.000); // white
243
	SetObjectMaterial(ColorMatchObjects[OBJ_WHITE], 0, 18646, "matcolours", "white", RGBAToARGB(ColorMatchColors[OBJ_WHITE]));
244
	
245
	#if defined CM_USEFENCES
246
	ColorMatchFences[0] = CreateObject(8674, 2005.395, 3871.529,102.859, 0.000, 0.000, 0.000);
247
	ColorMatchFences[1] = CreateObject(8674, 2000.584, 3866.285,102.859, 0.000, 0.000, 90.000);
248
	ColorMatchFences[2] = CreateObject(8674, 2010.208, 3866.285,102.859, 0.000, 0.000, 90.000);
249
	ColorMatchFences[3] = CreateObject(8674, 2005.395, 3861.021,102.859, 0.000, 0.000, 0.000);
250
	
251
	ColorMatchFences[4] = CreateObject(8674, 2005.395, 3871.529, 105.809, 0.000, 0.000, 0.000);
252
	ColorMatchFences[5] = CreateObject(8674, 2000.584, 3866.285, 105.809, 0.000, 0.000, 90.000);
253
	ColorMatchFences[6] = CreateObject(8674, 2010.208, 3866.285, 105.809, 0.000, 0.000, 90.000);
254
	ColorMatchFences[7] = CreateObject(8674, 2005.395, 3861.021, 105.809, 0.000, 0.000, 0.000);
255
	#endif
256
	
257
	ColorMatchTD = TextDrawCreate(39.000000, 300.000000, "_");
258
	TextDrawBackgroundColor(ColorMatchTD, 255);
259
	TextDrawFont(ColorMatchTD, 2);
260
	TextDrawLetterSize(ColorMatchTD, 0.260000, 1.400000);
261
	TextDrawColor(ColorMatchTD, -1);
262
	TextDrawSetOutline(ColorMatchTD, 1);
263
	TextDrawSetProportional(ColorMatchTD, 1);
264
	TextDrawSetSelectable(ColorMatchTD, 0);
265
	
266
	for(new i, mp = GetPlayerPoolSize(); i <= mp; i++) if(IsPlayerConnected(i)) ColorMatch_InitPlayer(i);
267
	return 1;
268
}
269
270
public OnFilterScriptExit()
271
{
272
	for(new i; i < sizeof(ColorMatchObjects); i++) DestroyObject(ColorMatchObjects[i]);
273
	
274
	#if defined CM_USEFENCES
275
	for(new i; i < sizeof(ColorMatchFences); i++) DestroyObject(ColorMatchFences[i]);
276
	#endif
277
	
278
	TextDrawDestroy(ColorMatchTD);
279
	
280
	for(new i, mp = GetPlayerPoolSize(); i <= mp; i++)
281
	{
282
		if(!IsPlayerConnected(i) || !InCMEvent[i]) continue;
283
		PlayerTextDrawDestroy(i, ColorText[i]);
284
		SetPlayerVirtualWorld(i, 0);
285
		SpawnPlayer(i);
286
	}
287
	
288
	return 1;
289
}
290
291
public OnPlayerConnect(playerid)
292
{
293
    ColorMatch_InitPlayer(playerid);
294
	return 1;
295
}
296
297
public OnPlayerStateChange(playerid, newstate, oldstate)
298
{
299
	ColorMatch_Eliminate(playerid);
300
	return 1;
301
}
302
303
CMD:colormatch(playerid, params[])
304
{
305
	if(InCMEvent[playerid]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You're already in the ColorMatch event.");
306
	if(ColorMatchStage == STAGE_PLAYING) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't join to the ColorMatch event because it started.");
307
	if(ColorMatchStage == STAGE_NONE) {
308
	    // init game
309
	    ColorMatchStage = STAGE_SETUP;
310
	    ColorMatchPlayers = 1;
311
	    ColorMatchTimer = SetTimerEx("CM_SetupTimer", 1000, false, "i", CM_SETUP_TIME);
312
	    ColorMatchFallTimer = ColorMatchEventTimer = -1;
313
		ColorMatch_Arena();
314
		
315
	    new string[144], name[MAX_PLAYER_NAME];
316
	    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
317
	    format(string, sizeof(string), "[COLORMATCH] {FFFFFF}%s(%d) has started the event. Use {F1C40F}/colormatch {FFFFFF}to join.", name, playerid);
318
	    SendClientMessageToAll(0x3498DBFF, string);
319
	}else{
320
	    // player join
321
	    if(ColorMatchPlayers >= CM_MAX_PLAYERS) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't join to the ColorMatch event because its full.");
322
	    ColorMatchPlayers++;
323
	    
324
	    new string[144], name[MAX_PLAYER_NAME];
325
	    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
326
	    format(string, sizeof(string), "[COLORMATCH] {FFFFFF}%s(%d) has joined the event. Use {F1C40F}/colormatch {FFFFFF}to join. [%d/%d]", name, playerid, ColorMatchPlayers, CM_MAX_PLAYERS);
327
	    SendClientMessageToAll(0x3498DBFF, string);
328
	}
329
330
    InCMEvent[playerid] = true;
331
332
	new Float: x, Float: y, Float: z;
333
	GetObjectPos(ColorMatchObjects[ random(9) ], x, y, z);
334
    SetPlayerPos(playerid, x + frandom(1.0, -1.0), y + frandom(1.0, -1.0), z + 1.0);
335
	SetPlayerVirtualWorld(playerid, 1);
336
	
337
	SendClientMessage(playerid, 0x3498DBFF, "[COLORMATCH] {FFFFFF}If you fall off/get stuck during setup time, don't worry because you'll get teleported again once the event begins.");
338
	return 1;
339
}
340
341
forward CM_SetupTimer(time);
342
public CM_SetupTimer(time)
343
{
344
	new string[144], soundid = 1056;
345
	time--;
346
	
347
	if(time < 1) {
348
		if(ColorMatchPlayers < CM_MIN_PLAYERS) {
349
	    	SendClientMessageToAll(0x3498DBFF, "[COLORMATCH] {FFFFFF}Event didn't start because not enough players joined.");
350
			ColorMatch_CleanUp(1);
351
			return 1;
352
		}else{
353
		    ColorMatchStage = STAGE_PLAYING;
354
		    ColorMatchTimer = SetTimer("CM_PickColor", 2000, false);
355
		    ColorMatchFallTimer = SetTimer("CM_FallTimer", 500, true);
356
		    ColorMatchEventTimer = SetTimerEx("CM_EndEvent", 1000, false, "i", CM_EVENT_TIME);
357
            TextDrawSetString(ColorMatchTD, "_");
358
            
359
		    format(string, sizeof(string), "~n~~n~~n~~b~~h~~h~Event ~g~~h~Started!");
360
		    soundid = 1057;
361
		}
362
	}else{
363
	    format(string, sizeof(string), "~n~~n~~n~~b~~h~~h~Event: ~g~~h~%d", time);
364
	    soundid = 1056;
365
	}
366
	
367
	for(new i, mp = GetPlayerPoolSize(); i <= mp; i++)
368
	{
369
		if(!IsPlayerConnected(i) || !InCMEvent[i]) continue;
370
		PlayerPlaySound(i, soundid, 0.0, 0.0, 0.0);
371
		GameTextForPlayer(i, string, 1000, 4);
372
		
373
		if(time < 1)
374
		{
375
		    TextDrawShowForPlayer(i, ColorMatchTD);
376
377
            new Float: x, Float: y, Float: z;
378
			GetObjectPos(ColorMatchObjects[ random(9) ], x, y, z);
379
		    SetPlayerPos(i, x + frandom(1.0, -1.0), y + frandom(1.0, -1.0), z + 1.0);
380
			
381
			#if defined CM_SEPERATE
382
			SetPlayerVirtualWorld(i, 100 + i);
383
			#endif
384
		}
385
  	}
386
  	
387
	if(time > 0) ColorMatchTimer = SetTimerEx("CM_SetupTimer", 1000, false, "i", time);
388
	return 1;
389
}
390
391
forward CM_FallTimer();
392
public CM_FallTimer()
393
{
394
	if(ColorMatchStage != STAGE_PLAYING) return 1;
395
	new Float: z;
396
	for(new i, mp = GetPlayerPoolSize(); i <= mp; i++)
397
	{
398
	    if(!IsPlayerConnected(i) || !InCMEvent[i]) continue;
399
	    GetPlayerPos(i, z, z, z);
400
	    if(z < 95.0) ColorMatch_Eliminate(i);
401
	}
402
	
403
	return 1;
404
}
405
406
forward CM_PickColor();
407
public CM_PickColor()
408
{
409
    if(ColorMatchStage != STAGE_PLAYING) return 1;
410
    new id = random(sizeof(ColorMatchNames));
411
    ColorMatchCurrent = id;
412
413
    for(new i, mp = GetPlayerPoolSize(); i <= mp; i++)
414
    {
415
        if(!IsPlayerConnected(i) || !InCMEvent[i]) continue;
416
        PlayerTextDrawColor(i, ColorText[i], ColorMatchColors[id]);
417
	    PlayerTextDrawSetString(i, ColorText[i], ColorMatchNames[ random(sizeof(ColorMatchNames)) ]);
418
		PlayerTextDrawShow(i, ColorText[i]);
419
    }
420
421
    ColorMatchTimer = SetTimer("CM_MoveObjects", 3000, false);
422
	return 1;
423
}
424
425
forward CM_MoveObjects();
426
public CM_MoveObjects()
427
{
428
    if(ColorMatchStage != STAGE_PLAYING) return 1;
429
    for(new i, mp = GetPlayerPoolSize(); i <= mp; i++)
430
    {
431
        if(!IsPlayerConnected(i) || !InCMEvent[i]) continue;
432
        PlayerTextDrawColor(i, ColorText[i], 0xFFFFFFFF);
433
	    PlayerTextDrawSetString(i, ColorText[i], "_");
434
		PlayerTextDrawHide(i, ColorText[i]);
435
    }
436
    
437
    new Float: x, Float: y, Float: z;
438
	for(new i; i < sizeof(ColorMatchObjects); i++)
439
	{
440
	    if(i == ColorMatchCurrent) continue;
441
	    GetObjectPos(ColorMatchObjects[i], x, y, z);
442
	    SetObjectPos(ColorMatchObjects[i], x, y, z - 1000.0);
443
	}
444
445
    ColorMatchTimer = SetTimer("CM_FixObjects", 3000, false);
446
	return 1;
447
}
448
449
forward CM_FixObjects();
450
public CM_FixObjects()
451
{
452
    if(ColorMatchStage != STAGE_PLAYING) return 1;
453
	new Float: x, Float: y, Float: z;
454
	for(new i; i < sizeof(ColorMatchObjects); i++)
455
	{
456
	    if(i == ColorMatchCurrent) continue;
457
	    GetObjectPos(ColorMatchObjects[i], x, y, z);
458
	    SetObjectPos(ColorMatchObjects[i], x, y, z + 1000.0);
459
	}
460
	
461
	ColorMatchTimer = SetTimer("CM_PickColor", 1000, false);
462
	return 1;
463
}
464
465
forward CM_EndEvent(time);
466
public CM_EndEvent(time)
467
{
468
    if(ColorMatchStage != STAGE_PLAYING) return 1;
469
    new string[32];
470
    
471
    if(time > 1) {
472
        time--;
473
        
474
        format(string, sizeof(string), "Time Left: %s%s", (time > 10) ? ("~y~~h~") : ("~r~~h~"), ConvertToMinutes(time));
475
        TextDrawSetString(ColorMatchTD, string);
476
        ColorMatchEventTimer = SetTimerEx("CM_EndEvent", 1000, false, "i", time);
477
    }else if(time == 1) {
478
        for(new i, mp = GetPlayerPoolSize(); i <= mp; i++)
479
	    {
480
	        if(!IsPlayerConnected(i) || !InCMEvent[i]) continue;
481
	        GivePlayerMoney(i, CM_REWARD);
482
	        SendClientMessage(i, 0x3498DBFF, "[COLORMATCH] {FFFFFF}You're all winners!");
483
	    }
484
	    
485
        SendClientMessageToAll(0x3498DBFF, "[COLORMATCH] {FFFFFF}Event ended.");
486
        ColorMatch_CleanUp(1);
487
    }
488
    
489
	return 1;
490
}