All pastes #802635 Raw Edit

Miscellany

public text v1 · immutable
#802635 ·published 2007-11-30 14:04 UTC
rendered paste body
#include <a_samp>

#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

#define REF 0
#define TEAM1 1
#define TEAM2 2

#define PLAYERS GetMaxPlayers()

#define COLOR_RED 0xFF0000AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_BLUE 0x0000BBAA
#define COLOR_GREY 0xAFAFAFAA

new gTeam[MAX_PLAYERS],
	weap2[MAX_PLAYERS]; //arma secondaria del player:
	                    // 0:MP5
	                    // 1:M4
	                    // 2:AK47
	                    // 3:SHOTGUN
new isselectingweap[MAX_PLAYERS]; // il player è nella schermata di selezione arma?
new Text:weap2select,
	Text:yellowscore,
	Text:bluescore,
	Text:timer,
	Text:spectselect;
new score[2];
new team1name[30] = "giallo";
new team2name[30] = "blu";
new rounds[2]; //round vinti
new time = 480;
new timer_textupdate;
new isstarted;
new randblocks[3];
new spec[MAX_PLAYERS];
new isspectating[MAX_PLAYERS];

new Float:spawns[10][5][3] = {
	{
		{2619.5771,-1474.7565,16.2734},
		{2612.7605,-1472.5052,16.3128},
		{2605.4270,-1474.8188,16.2676},
		{2598.6855,-1473.0249,16.2825},
		{2589.2410,-1472.0790,16.3066}
	},
	{
		{2552.6169,-1732.3458,5.8184},
		{2564.0471,-1737.3485,1.2146},
		{2599.8655,-1731.5680,1.2040},
		{2613.7952,-1734.3782,5.8074},
		{2584.8518,-1757.5911,1.2477}
	},
	{
		{2555.6262,-2199.4880,-0.6453},
		{2564.4136,-2201.2495,-0.6538},
		{2574.6997,-2201.4592,-0.6672},
		{2591.9688,-2203.0779,-0.6543},
		{2603.9907,-2203.9224,-0.6480}
	},
	{
		{2253.4529,-1859.3894,-0.5637},
		{2253.4060,-1853.0880,-0.5644},
		{2250.1558,-1843.6338,-0.5610},
		{2261.9329,-1845.0004,-0.5690},
		{2268.2883,-1857.3252,-0.5691}
	},
	{
		{2054.1370,-1933.2242,7.5542},
		{2051.5332,-1938.2440,7.5586},
		{2049.3071,-1943.9692,7.5547},
		{2058.7205,-1950.7396,7.5610},
		{2063.4246,-1948.6650,7.5519}
	},
	{
		{2255.9863,-2155.8057,5.6290},
		{2258.9907,-2152.1218,5.6620},
		{2263.8813,-2146.4424,5.6847},
		{2271.6189,-2154.6968,5.6311},
		{2261.6638,-2162.4697,5.6308}
	},
	{
		{1724.5719,-1794.4575,3.5657},
		{1728.5861,-1789.2808,3.5387},
		{1730.2488,-1784.5197,3.5609},
		{1737.5974,-1789.2020,3.5640},
		{1737.3716,-1794.6152,3.5575}
	},
	{
		{1396.3591,-1719.6805,7.4670},
		{1397.1129,-1716.0316,7.4617},
		{1401.1434,-1711.9742,7.1694},
		{1410.3632,-1712.8706,6.4707},
		{1412.1736,-1718.8323,6.4284}
	},
	{
		{1389.1011,-1511.5945,8.2371},
		{1385.1399,-1512.1974,8.2443},
		{1381.3280,-1512.5894,8.2429},
		{1381.1021,-1521.5190,8.2353},
		{1384.2041,-1522.3859,8.2348}
	},
	{
		{1407.3745,-1309.0442,8.5723},
		{1410.8390,-1308.1506,9.0087},
		{1414.6289,-1308.3738,8.8583},
		{1413.7987,-1313.7603,9.1225},
		{1407.8077,-1318.2426,8.1603}
	}
};

main()
{
	print("\n----------------------------------");
	print(" Underground Duels by Atti93 and Chiarboss");
	print("----------------------------------\n");
}

public OnGameModeInit()
{
	new str[255];
	SetGameModeText("Underground Duels");
	UsePlayerPedAnims();
	ShowNameTags(1);
	ShowPlayerMarkers(1);
	SetWorldTime(2);
	SetWeather(7);

	AddPlayerClass(264, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
	AddPlayerClass(285, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
	AddPlayerClass(287, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);

	weap2select = TextDrawCreate(40, 130, "Seleziona l'arma con SPAZIO (SALTO), ~n~conferma con MOUSE SX (FUOCO)");
	TextDrawColor(weap2select, 0xFFFFFFDD);
	TextDrawFont(weap2select, 3);

	spectselect = TextDrawCreate(40, 130, "Cambia player da spectare SPAZIO (SALTO), ~n~spawna vicino a lui con MOUSE SX (FUOCO), ~n~torna alla class selection digitando /selclass");
	TextDrawColor(spectselect, 0xFFFFFFDD);
	TextDrawFont(spectselect, 3);

	format(str, 255,"Team %s: %d [%d rounds]", team1name, score[0], rounds[0]);
	yellowscore = TextDrawCreate(200, 380, str);
	TextDrawColor(yellowscore, COLOR_YELLOW);
	TextDrawFont(yellowscore, 3);
	TextDrawUseBox(yellowscore,1);
	TextDrawTextSize(yellowscore,540.000000,400.000000);
	TextDrawSetShadow(yellowscore, 1);

	format(str, 255,"Team %s: %d [%d rounds]", team2name, score[1], rounds[1]);
	bluescore = TextDrawCreate(200, 394, str);
	TextDrawColor(bluescore, COLOR_BLUE);
	TextDrawFont(bluescore, 3);
	TextDrawUseBox(bluescore,1);
	TextDrawTextSize(bluescore,540.000000,420.000000);
	TextDrawSetShadow(bluescore, 1);

	format(str, 255,"TIMER: %d", TimeConvert(time));
	timer = TextDrawCreate(200, 408, str);
	TextDrawUseBox(timer,1);
	TextDrawTextSize(timer,540.000000,440.000000);
	TextDrawFont(timer, 3);

	timer_textupdate = SetTimer("TextUpdate", 1000, 1);
	return 1;
}

TimeConvert(seconds) {
	new tmp[256];
 	new minutes = floatround(seconds/60);
	seconds -= minutes*60;
	format(tmp, sizeof(tmp), "%d:%02d", minutes, seconds);
	return tmp;
}

public OnGameModeExit()
{
	return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    TogglePlayerSpectating(playerid, 0);
	isselectingweap[playerid] = 1;
	SetPlayerPos(playerid, 1489.0846,-1719.7332,8.2402);
	SetPlayerFacingAngle(playerid, 167.7928);
	SetPlayerCameraPos(playerid, 1486.6761,-1724.4917,6.7431);
	SetPlayerCameraLookAt(playerid, 1489.0846,-1719.7332,8.2402);
	switch(classid)
	{
  	    case 0: // TEAM REF
	    {
	        gTeam[playerid] = REF;
			new str[255];
			format(str, 255, "~n~~n~~n~~r~ TEAM REF");
			GameTextForPlayer(playerid, str, 3000, 3);
			SetPlayerColor(playerid, COLOR_RED);
		}
	    case 1: // TEAM 1
	    {
	        gTeam[playerid] = TEAM1;
			new str[255];
			format(str, 255, "~n~~n~~n~~y~ TEAM %s", team1name);
			GameTextForPlayer(playerid, str, 3000, 3);
			SetPlayerColor(playerid, COLOR_YELLOW);

		}
  	    case 2: // TEAM 2
	    {
	        gTeam[playerid] = TEAM2;
			new str[255];
			format(str, 255, "~n~~n~~n~~b~ TEAM %s", team2name);
			GameTextForPlayer(playerid, str, 3000, 3);
			SetPlayerColor(playerid, COLOR_BLUE);
		}
	}
	return 1;
}

public OnPlayerRequestSpawn(playerid)
{
	return 1;
}

public OnPlayerConnect(playerid)
{
	SendClientMessage(playerid, COLOR_GREY, " ");
	SendClientMessage(playerid, COLOR_GREY, " ");
	SendClientMessage(playerid, COLOR_GREY, " ");

	SendClientMessage(playerid, COLOR_GREY, "---------------------===============================---------------------");
	SendClientMessage(playerid, COLOR_YELLOW, "     .: Underground Duels v0.1 perenne by Atti93 e Chiarboss :.");
	SendClientMessage(playerid, COLOR_YELLOW, "     .: Digita /help per una lista di comandi :.");
	SendClientMessage(playerid, COLOR_GREY, "---------------------===============================---------------------");

	SendClientMessage(playerid, COLOR_GREY, " ");
	SendClientMessage(playerid, COLOR_GREY, " ");
	SendClientMessage(playerid, COLOR_GREY, " ");

	TextDrawShowForPlayer(playerid, yellowscore);
	TextDrawShowForPlayer(playerid, bluescore);
	TextDrawShowForPlayer(playerid, timer);
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    SetPlayerVirtualWorld(playerid, 0);
	return 1;
}

public OnPlayerSpawn(playerid)
{
    new rand=random(5);
	if(isselectingweap[playerid] == 1)
	{
	    SetPlayerVirtualWorld(playerid, playerid+1);
	    if(gTeam[playerid] == REF)
	    {
	        isselectingweap[playerid] = 0;
			SpawnPlayer(playerid);
		}
		else
		{
	 		TogglePlayerControllable(playerid, 0);
			SetPlayerPos(playerid, 1489.0846,-1719.7332,8.2402);
			SetPlayerFacingAngle(playerid, 167.7928);
			SetPlayerCameraPos(playerid, 1486.6761,-1724.4917,6.7431);
			SetPlayerCameraLookAt(playerid, 1489.0846,-1719.7332,8.2402);
			TextDrawShowForPlayer(playerid, weap2select);
		}
	}
	else
	{
		//TUTTO IL RESTO, COMPRESO IL TUO SISTEMA DI RANDOM SPAWNS
		TextDrawHideForPlayer(playerid, weap2select);
		SetPlayerVirtualWorld(playerid, 0);
  		if(gTeam[playerid] != REF)WeaponArsenal(playerid);

  		if(gTeam[playerid] == REF)
  		{
  		    if(isspectating[playerid] != 255)
  		    {
	  			TogglePlayerSpectating(playerid, 1);
	  			spec[playerid] = -1;
		    	isspectating[playerid] = 1;
       			TextDrawShowForPlayer(playerid, spectselect);
	  		    SpectNextPlayer(playerid);
			}
  		}
	}
	if(isstarted)
	{
		SetPlayerPos(playerid, spawns[randblocks[gTeam[playerid]]][rand][0], spawns[randblocks[gTeam[playerid]]][rand][1], spawns[randblocks[gTeam[playerid]]][rand][2]);
		SetCameraBehindPlayer(playerid);
	}
	return 1;
}

stock SpectNextPlayer(playerid)
{
    spec[playerid]++;

	if(spec[playerid] == GetMaxPlayers()+1)
	{
		spec[playerid] = -1;
	 	return SpectNextPlayer(playerid);
	}

    if(IsPlayerConnected(spec[playerid]) && gTeam[spec[playerid]] != REF)
	{
		PlayerSpectatePlayer(playerid, spec[playerid]);
		new str[255], pname[MAX_PLAYER_NAME];
		GetPlayerName(spec[playerid], pname, MAX_PLAYER_NAME);
		format(str, 255, "Spectating: %s", pname);
		SendClientMessage(playerid, COLOR_RED, str);
	}
	else if (spec[playerid] != GetMaxPlayers() - 2) return SpectNextPlayer(playerid);
	return 0;
}

stock WeaponArsenal(playerid){
	GivePlayerWeapon(playerid, WEAPON_DEAGLE, 999999);
	switch(weap2[playerid]){
	case 0:GivePlayerWeapon(playerid, WEAPON_MP5, 999999);
	case 1:GivePlayerWeapon(playerid, WEAPON_M4, 999999);
	case 2:GivePlayerWeapon(playerid, WEAPON_AK47, 999999);
	case 3:GivePlayerWeapon(playerid, WEAPON_SHOTGUN, 999999);}
}

public OnPlayerDeath(playerid, killerid, reason)
{
	SendDeathMessage(killerid, playerid, reason);
	if(isstarted)
	{
		if(killerid!=INVALID_PLAYER_ID)
		{
			if(gTeam[killerid] != REF && gTeam[playerid]!= REF && gTeam[killerid] != gTeam[playerid])
			{
		 		SetPlayerScore(killerid, GetPlayerScore(killerid)+1);
	 			if(gTeam[killerid]==TEAM1) score[0]++;
				else if(gTeam[killerid]==TEAM2) score[1]++;
				new str[255];
				format(str, 255, "UD: %s %d[%d] vs %s %d[%d]", team1name, score[0], rounds[0], team2name, score[1], rounds[1]);
				SetGameModeText(str);
			}
			else if(gTeam[playerid] == REF) TextDrawHideForPlayer(playerid, spectselect);
		}
	}
	return 1;
}

public OnVehicleSpawn(vehicleid)
{
	return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
	return 1;
}

public OnPlayerText(playerid, text[])
{
	return 1;
}

public OnPlayerPrivmsg(playerid, recieverid, text[])
{
	return 1;
}

stock RandomControl()
{
   new Float:arrspawn[3][3];
   for(new i=0,h=0,f=0,g=0;i<5,g<5,h<3,f<3;i++,h++,f++,g++)randblocks[h]=random(sizeof(spawns)),arrspawn[h][f]+=spawns[randblocks[h]][i][f];
   if(GetDistanceBetweenPoints(arrspawn[1][0],arrspawn[2][0],arrspawn[1][1],arrspawn[2][1],arrspawn[1][2],arrspawn[2][2]) <= 148.50)return RandomControl();
   return 1;
}

stock GetDistanceBetweenPoints(Float:x1,Float:x2,Float:y1,Float:y2,Float:z1,Float:z2){new Float:dis= floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));return floatround(dis);}

//----
dcmd_help(playerid, params[])
{
	#pragma unused params
 	SendClientMessage(playerid, 0xAA3333AA, "Ecco una lista dei comandi utilizzabili:");
	if(IsPlayerAdmin(playerid))
	{
	    SendClientMessage(playerid, 0xAA3333AA, "/score [TEAM] [SCORE]; [TEAM] o=orange, b=blue; [SCORE] punteggio.");
 	    SendClientMessage(playerid, 0xAA3333AA, "/rounds [TEAM] [ROUNDS]; [TEAM] o=orange, b=blue; [ROUNDS] rounds vinti (max 2).");
 	    SendClientMessage(playerid, 0xAA3333AA, "/timer [TIME]; [TIME] tempo in secondi restante alla fine del round.");
 	    SendClientMessage(playerid, 0xAA3333AA, "/start; fa partire la cw.");
 	    SendClientMessage(playerid, 0xAA3333AA, "/stop; sospende la cw.");
 	    SendClientMessage(playerid, 0xAA3333AA, "/spawnall; rispawna tutti i players.");
 	}
 	if(gTeam[playerid] != REF)
 	{
		SendClientMessage(playerid, 0xAA3333AA, "/name [NAME]; [NAME] nome del tuo team.");
	}
	return 1;
}

//----
dcmd_start(playerid, params[])
{
	#pragma unused params
	if(IsPlayerAdmin(playerid))
	{
		RandomControl();
        isstarted = 1;
        GameTextForAll("CW avviata!", 3500, 4);
        for(new i=0;i<GetMaxPlayers()+1;i++)SpawnPlayer(i);
 	}
	return 1;
}
//----
dcmd_selclass(playerid, params[])
{
	#pragma unused params
	if(isspectating[playerid] != 255)
	{
		isspectating[playerid] = 255;
		TogglePlayerSpectating(playerid, 0);
		ForceClassSelection(playerid);
		TextDrawHideForPlayer(playerid, spectselect);
		SetPlayerHealth(playerid, 0);
 	}
	return 1;
}
//----
dcmd_spawnall(playerid, params[])
{
	#pragma unused params
	if(IsPlayerAdmin(playerid))
	{
		SendClientMessageToAll(COLOR_RED, "L'admin rispawna tutti i players!");
		for(new i; i<MAX_PLAYERS; i++) SpawnPlayer(i);
 	}
	return 1;
}
//----
dcmd_stop(playerid, params[])
{
	#pragma unused params
	if(IsPlayerAdmin(playerid))
	{
		isstarted = 0;
		GameTextForAll("CW sospesa!", 3000, 4);
 	}
	return 1;
}
//----
dcmd_score(playerid, params[])
{
	if(IsPlayerAdmin(playerid))
	{
		new str[255],
		    ob[30],
		    cmdscore;

		if(!sscanf(params, "sd", ob, cmdscore))
		{
		    SendClientMessage(playerid, 0xAA3333AA, "USO: /score [TEAM] [SCORE]; [TEAM] o=orange, b=blue; [SCORE] punteggio.");
		}
		else
		{
			if(cmdscore > 0)
			{
			    if(strcmp(ob, "o", false, 1) == 0)
			    {
			        score[0] = cmdscore;
			        format(str, 255, "L'admin setta il punteggio del team %s a %d.", team1name, cmdscore);
			        SendClientMessageToAll(0xAA3333AA, str);
				}
			    else if(strcmp(ob, "b", false, 1) == 0)
			    {
			        score[1] = cmdscore;
			        format(str, 255, "L'admin setta il punteggio del team %s a %d.", team2name, cmdscore);
			        SendClientMessageToAll(0xAA3333AA, str);
				}
				else
			    {
			        SendClientMessage(playerid, 0xAA3333AA, "[TEAM] non valido.");
				}
			}
			else
			{
			    SendClientMessage(playerid, 0xAA3333AA, "[SCORE] non valido.");
			}
		}
	}
	return 1;
}
//----
dcmd_rounds(playerid, params[])
{
	if(IsPlayerAdmin(playerid))
	{
		new str[255],
		    ob[30],
		    cmdrounds;

		if(!sscanf(params, "sd", ob, cmdrounds))
		{
		    SendClientMessage(playerid, 0xAA3333AA, "USO: /score [TEAM] [SCORE]; [TEAM] o=orange, b=blue; [ROUNDS] rounds vinti (max 2).");
		}
		else
		{
			if(cmdrounds > 0 || cmdrounds < 2)
			{
			    if(strcmp(ob, "o", false, 1) == 0)
			    {
			        rounds[0] = cmdrounds;
			        format(str, 255, "L'admin setta il numero di rounds vinti dal team %s a %d.", team1name, cmdrounds);
			        SendClientMessageToAll(0xAA3333AA, str);
				}
			    else if(strcmp(ob, "b", false, 1) == 0)
			    {
			        rounds[1] = cmdrounds;
			        format(str, 255, "L'admin setta il numero di rounds vinti dal team %s a %d.", team2name, cmdrounds);
			        SendClientMessageToAll(0xAA3333AA, str);
				}
				else
			    {
			        SendClientMessage(playerid, 0xAA3333AA, "[TEAM] non valido.");
				}
			}
			else
			{
			    SendClientMessage(playerid, 0xAA3333AA, "[ROUNDS] non validi.");
			}
		}
	}
	return 1;
}
//----
dcmd_timer(playerid, params[])
{
	if(IsPlayerAdmin(playerid))
	{
		new str[255],
	    cmdtime;

		if(!sscanf(params, "d", cmdtime))
		{
		    SendClientMessage(playerid, 0xAA3333AA, "USO: /timer [TIME]; [TIME] tempo restante alla fine del round.");
		}
		else
		{
		    if(cmdtime <= 0)
		    {
		        SendClientMessage(playerid, 0xAA3333AA, "[TIME] non valido.");
			}
			else
			{
				time = cmdtime;
				format(str, 255, "L'admin setta il tempo restante alla fine del round a %d secondi.", cmdtime);
				SendClientMessageToAll(0xAA3333AA, str);
			}
		}
	}
	return 1;
}
//----
dcmd_name(playerid, params[])
{
	if(gTeam[playerid] == REF)
	{
	    SendClientMessage(playerid, 0xAA3333AA, "Il tuo team non può selezionare un nome.");
	}
	else
	{
		new str[255],
	    cmdname[255];


		if(!sscanf(params, "s", cmdname))
		{
		    SendClientMessage(playerid, 0xAA3333AA, "USO: /name [NAME]; [NAME] nome del team.");
		}
		else
		{
		    if(strlen(cmdname) > 29)
		    {
		        SendClientMessage(playerid, 0xAA3333AA, "[NAME] non valido.");
			}
			else
			{
				switch(gTeam[playerid])
				{
				    case TEAM1:
				    {
						format(team1name, sizeof(team1name), cmdname);
						format(str, 255, "Nome del team giallo settato a %s", cmdname);
						SendClientMessageToAll(COLOR_YELLOW, str);
					}
					case TEAM2:
				    {
						format(team2name, sizeof(team2name), cmdname);
						format(str, 255, "Nome del team blu settato a %s", cmdname);
						SendClientMessageToAll(COLOR_BLUE, str);
					}
				}
			}
		}
	}
	return 1;
}
//----
public OnPlayerCommandText(playerid, cmdtext[])
{
	dcmd(help, 4, cmdtext);
	dcmd(start, 5, cmdtext);
	dcmd(selclass, 8, cmdtext);
	dcmd(stop, 4, cmdtext);
	dcmd(score, 5, cmdtext);
	dcmd(rounds, 6, cmdtext);
	dcmd(timer, 5, cmdtext);
	dcmd(name, 4, cmdtext);
	dcmd(spawnall, 8, cmdtext);
	return 0;
}

public OnPlayerInfoChange(playerid)
{
	return 1;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
	return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
	return 1;
}

IsKeyJustDown(key, newkeys, oldkeys)
{
	if((newkeys & key) && !(oldkeys & key)) return 1;
	return 0;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	if(isselectingweap[playerid] == 1 && gTeam[playerid]!= REF)
	{
	    if(IsKeyJustDown(KEY_JUMP,newkeys,oldkeys))
	    {
			if(weap2[playerid] == 0)
			{
			    weap2[playerid] = 3;
			}
			else
			{
			    weap2[playerid]--;
			}
			switch(gTeam[playerid])
			{
			    // nuovo gametext
			    case TEAM1:
			    {
			        switch(weap2[playerid])
			        {
			            case 0:
						{
							new str[255];
							format(str, 255, "~n~~n~~n~~y~ TEAM %s ~n~~g~ ARMI: ~n~ DESERT EAGLE - MP5", team1name);
							GameTextForPlayer(playerid, str, 3000, 3);
						}
			            case 1:
						{
							new str[255];
							format(str, 255, "~n~~n~~n~~y~ TEAM %s ~n~~g~ ARMI: ~n~ DESERT EAGLE - M4", team1name);
							GameTextForPlayer(playerid, str, 3000, 3);
						}
			            case 2:
						{
							new str[255];
							format(str, 255, "~n~~n~~n~~y~ TEAM %s ~n~~g~ ARMI: ~n~ DESERT EAGLE - AK47", team1name);
							GameTextForPlayer(playerid, str, 3000, 3);
						}
			            case 3:
						{
							new str[255];
							format(str, 255, "~n~~n~~n~~y~ TEAM %s ~n~~g~ ARMI: ~n~ DESERT EAGLE - SHOTGUN", team1name);
							GameTextForPlayer(playerid, str, 3000, 3);
						}
					}
				}
			    case TEAM2:
			    {
			        switch(weap2[playerid])
			        {
			            case 0:
						{
							new str[255];
							format(str, 255, "~n~~n~~n~~b~ TEAM %s ~n~~g~ ARMI: ~n~ DESERT EAGLE - MP5", team2name);
							GameTextForPlayer(playerid, str, 3000, 3);
						}
			            case 1:
						{
							new str[255];
							format(str, 255, "~n~~n~~n~~b~ TEAM %s ~n~~g~ ARMI: ~n~ DESERT EAGLE - M4", team2name);
							GameTextForPlayer(playerid, str, 3000, 3);
						}
			            case 2:
						{
							new str[255];
							format(str, 255, "~n~~n~~n~~b~ TEAM %s ~n~~g~ ARMI: ~n~ DESERT EAGLE - AK47", team2name);
							GameTextForPlayer(playerid, str, 3000, 3);
						}
			            case 3:
						{
							new str[255];
							format(str, 255, "~n~~n~~n~~b~ TEAM %s ~n~~g~ ARMI: ~n~ DESERT EAGLE - SHOTGUN", team2name);
							GameTextForPlayer(playerid, str, 3000, 3);
						}
					}
				}
			}
		}
		if(IsKeyJustDown(KEY_FIRE,newkeys,oldkeys))
		{
		    isselectingweap[playerid] = 0;
		    SpawnPlayer(playerid);
		}
	}
 	else if(gTeam[playerid] == REF && isspectating[playerid] == 1)
 	{
	    if(IsKeyJustDown(KEY_JUMP,newkeys,oldkeys))
	    {
	        SpectNextPlayer(playerid);
		}
		else if(IsKeyJustDown(KEY_FIRE,newkeys,oldkeys))
		{
		    isspectating[playerid] = 255;
		    TogglePlayerSpectating(playerid, 0);
    		TextDrawHideForPlayer(playerid, spectselect);
    		new Float:x, Float:y, Float:z;
    		GetPlayerPos(spec[playerid], x, y, z);
    		SetPlayerPos(playerid, x+2, y+2, z+1);
		}
	}
}
public OnPlayerEnterCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
	return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
	return 1;
}

public OnRconCommand(cmd[])
{
	return 1;
}

public OnObjectMoved(objectid)
{
	return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
	return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
	return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
	return 1;
}

public OnPlayerExitedMenu(playerid)
{
	return 1;
}

forward FineRound(winner);
public FineRound(winner) // si lavora con i TEAM definiti, per non incasinare tutto con numeri incomprensibili
{
	new str[255];
	if(winner == TEAM1)
	{
		format(str, 255, "Vince il round la squadra %s!", team1name);
		SendClientMessageToAll(COLOR_RED, " ");
		SendClientMessageToAll(COLOR_RED, " ");
		SendClientMessageToAll(COLOR_YELLOW, str);
		SendClientMessageToAll(COLOR_RED, " ");
		SendClientMessageToAll(COLOR_RED, " ");

		format(str, 255, "~r~ROUND TERMINATO ~n~~y~BEST KILLER: %s", GetBestKillerName());
		GameTextForAll(str, 5000, 4);
		SetTimer("NewRound", 5000, 0);

		rounds[0]++;
		if(rounds[0] == 3)
		{
			SetTimerEx("FineGmode", 3000, 0, "d", TEAM1);
		}
		time=480;

	}
	else if(winner == TEAM2)
	{
		format(str, 255, "Vince il round la squadra %s!", team2name);
		SendClientMessageToAll(COLOR_RED, " ");
		SendClientMessageToAll(COLOR_RED, " ");
		SendClientMessageToAll(COLOR_BLUE, str);
		SendClientMessageToAll(COLOR_RED, " ");
		SendClientMessageToAll(COLOR_RED, " ");

		format(str, 255, "~r~ROUND TERMINATO ~n~~b~BEST KILLER: %s", GetBestKillerName());
		GameTextForAll(str, 5000, 4);
		SetTimer("NewRound", 5000, 0);

		rounds[1]++;
		if(rounds[1] == 3)
		{
			SetTimerEx("FineGmode", 3000, 0, "d", TEAM2);
		}
		time=480;
	}

	return 1;
}

stock GetBestKillerName()
{
	new bkillid;
	new tmpscore;
	for(new i; i<PLAYERS; i++) if(GetPlayerScore(i) >= tmpscore) tmpscore = GetPlayerScore(i), bkillid = i;
	new pname[MAX_PLAYER_NAME];
	GetPlayerName(bkillid, pname, MAX_PLAYER_NAME);
	return pname;
}

forward NewRound();
public NewRound()
{
	RandomControl();
	for(new i; i<PLAYERS; i++) TogglePlayerControllable(i, 1), SpawnPlayer(i), SetPlayerHealth(i,100), SetPlayerScore(i, 0);  //da aggiornare col sistema degli spawn
	timer_textupdate = SetTimer("TextUpdate", 1000, 1);
	return 1;
}

forward TextUpdate();
public TextUpdate()
{
	new str[255];
	format(str, 255, "Team %s: %d [%d rounds]", team1name, score[0], rounds[0]);
	TextDrawSetString(yellowscore, str);
	format(str, 255, "Team %s: %d [%d rounds]", team2name, score[1], rounds[1]);
	TextDrawSetString(bluescore, str);
	format(str, 255, "TIMER: %d", time);
	TextDrawSetString(timer, str);
	if(isstarted)
	{
		time--;
		if(time <= 0)
		{
		    if(score[0]>score[1])
		    {
		        SetTimerEx("FineRound", 3000, 0, "d", TEAM1);
		        for(new i; i<PLAYERS; i++)
		        {
					TogglePlayerControllable(i, 0);
					//FAGLI QUELLO CHE CAZZO VUOI, MA POI UNFREEZALI! (RICORDA UN BEL GAMETEXT DI NUOVO ROUND)
				}
				score[0]=0;
				score[1]=0;
				KillTimer(timer_textupdate);
			}
		    else if(score[1]>score[0])
		    {
		        SetTimerEx("FineRound", 3000, 0, "d", TEAM2);
		        for(new i; i<PLAYERS; i++)
		        {
					TogglePlayerControllable(i, 0);
					//IDEM CON PATATE
				}
				score[0]=0;
				score[1]=0;
				KillTimer(timer_textupdate);
			}
		    else
		    {
		        SendClientMessageToAll(COLOR_RED, "Pareggio, un minuto supplementare!");
		        time = 60;
			}
			format(str, 255, "UDuels: %s %d[%d] vs %s %d[%d]", team1name, score[0], rounds[0], team2name, score[1], rounds[1]);
			SetGameModeText(str);
		}
	}
	return 1;
}

forward FineGmode(winner);
public FineGmode(winner)
{
	new str[255];
	switch(winner)
	{
	    case TEAM1:
		{
			format(str, 255, "Gmode finita, vince la squadra %s!", team1name);
			SendClientMessageToAll(COLOR_RED, " ");
			SendClientMessageToAll(COLOR_RED, " ");
			SendClientMessageToAll(COLOR_YELLOW, str);
		}
	    case TEAM2:
		{
			format(str, 255, "Gmode finita, vince la squadra %s!", team2name);
			SendClientMessageToAll(COLOR_RED, " ");
			SendClientMessageToAll(COLOR_RED, " ");
			SendClientMessageToAll(COLOR_BLUE, str);
		}
	}
	return SetTimer("ScriptEndGm", 5000, 0);
}

forward ScriptEndGm();
public ScriptEndGm() GameModeExit();

stock sscanf(string[], format[], {Float,_}:...)
{
	new
		formatPos,
		stringPos,
		paramPos = 2,
		paramCount = numargs();
	while (paramPos < paramCount && string[stringPos])
	{
		switch (format[formatPos])
		{
			case '\0': break;
			case 'i', 'd': setarg(paramPos, 0, strval(string[stringPos]));
			case 'c': setarg(paramPos, 0, string[stringPos]);
			case 'f': setarg(paramPos, 0, _:floatstr(string[stringPos]));
			case 's':
			{
				new
					end = format[formatPos + 1] == '\0' ? '\0' : ' ',
					i;
				while (string[stringPos] != end) setarg(paramPos, i++, string[stringPos++]);
				setarg(paramPos, i, '\0');
			}
			default: goto skip;
		}
		while (string[stringPos] && string[stringPos] != ' ') stringPos++;
		while (string[stringPos] == ' ') stringPos++;
		paramPos++;
		skip:
		formatPos++;
	}
	return format[formatPos] ? 0 : 1;
}