Jump to content
Geplaatst:
comment_1475733

Ik ben bezig met een race minigame,

en ik heb er nu een begin count ingezet (die van Sandra Jump-Competition)

Maar nu werkt het unfreezen alleen maar bij 1 speler,

Weet iemand hoe ik het zo neerzet zodat het voor iedereen geld die aan de race mee doet?

Hier is de code van de timer:

forward Start();public Start()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(join[i] == 1)
	{
		Count++;
		if(Count == 1) GameTextForPlayer(i, "~g~30", 3000, 3);
		if(Count == 2) GameTextForPlayer(i, "~g~29", 3000, 3);
		if(Count == 3) GameTextForPlayer(i, "~g~28", 3000, 3);
		if(Count == 4) GameTextForPlayer(i, "~g~27", 3000, 3);
		if(Count == 5) GameTextForPlayer(i, "~g~26", 3000, 3);
		if(Count == 6) GameTextForPlayer(i, "~g~25", 3000, 3);
		if(Count == 7) GameTextForPlayer(i, "~g~24", 3000, 3);
		if(Count == 8) GameTextForPlayer(i, "~g~23", 3000, 3);
		if(Count == 9) GameTextForPlayer(i, "~g~22", 3000, 3);
		if(Count == 10) GameTextForPlayer(i, "~g~21", 3000, 3);
		if(Count == 11) GameTextForPlayer(i, "~g~20", 3000, 3);
		if(Count == 12) GameTextForPlayer(i, "~g~19", 3000, 3);
		if(Count == 13) GameTextForPlayer(i, "~g~18", 3000, 3);
		if(Count == 14) GameTextForPlayer(i, "~g~17", 3000, 3);
		if(Count == 15) GameTextForPlayer(i, "~g~16", 3000, 3);
		if(Count == 16) GameTextForPlayer(i, "~b~15", 3000, 3);
		if(Count == 17) GameTextForPlayer(i, "~b~14", 3000, 3);
		if(Count == 18) GameTextForPlayer(i, "~b~13", 3000, 3);
		if(Count == 19) GameTextForPlayer(i, "~b~12", 3000, 3);
		if(Count == 20) GameTextForPlayer(i, "~b~11", 3000, 3);
		if(Count == 21) GameTextForPlayer(i, "~b~10", 3000, 3);
		if(Count == 22) GameTextForPlayer(i, "~b~9", 3000, 3);
		if(Count == 23) GameTextForPlayer(i, "~b~8", 3000, 3);
		if(Count == 24) GameTextForPlayer(i, "~b~7", 3000, 3);
		if(Count == 25) GameTextForPlayer(i, "~b~6", 3000, 3);
		if(Count == 26) GameTextForPlayer(i, "~r~5", 3000, 3);
		if(Count == 27) GameTextForPlayer(i, "~r~4", 3000, 3);
		if(Count == 28) GameTextForPlayer(i, "~r~3", 3000, 3);PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
		if(Count == 29) GameTextForPlayer(i, "~r~2", 3000, 3);PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
		if(Count == 30) GameTextForPlayer(i, "~r~1", 3000, 3);PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
		if(Count == 31)
		{
		racestart = 2;
		GameTextForPlayer(i, "~b~Go ~g~Go! ~r~GO!!", 2000, 3);
		KillTimer(countstart);
		PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
		TogglePlayerControllable(i, 1);
		}
	}
}
}

Featured Replies

Geplaatst:
comment_1476657

Uhg, wat is dat voor een inefficiënte code ...

new Count = 30;

forward Start();
public Start()
{
if(Count == -1) { return 1; }
for(new i = 0; i < MAX_PLAYERS; i++)
{
	if(join[i] == 1)
	{
		switch(Count)
		case 0:
		{
			GameTextForPlayer(i, "GO! GO! GO!", 2500, 3);
			racestart = 2;
			TogglePlayerControllable(i, 1);
		}
		case 1..3:
		{
			format(string, sizeof(string), "~r~%d", Count);
			GameTextForPlayer(i, string, 1000, 3);
			PlayerPlaySound(1, 1057, 0.0, 0.0, 0.0);
		}
		default:
		{
			format(string, sizeof(string), "~g~%d", Count);
			GameTextForPlayer(i, string, 1000, 3);
		}
	}
}
if(Count >= 0) { Count--; }
SetTimer("Start", 1000, 0);
return 1;
}

Geen idee of dit werkt, maar daar zou je in ieder geval naar toe moeten werken. Het heeft geen zin om 30 if's te zetten als je de format en/of switch gebruikt.

Geplaatst:
  • Auteur
comment_1476803

Als eerste krijg ik deze errors:

F:\Server B\filterscripts\chiliadrace.pwn(377) : warning 217: loose indentation

F:\Server B\filterscripts\chiliadrace.pwn(384) : error 001: expected token: "{", but found "case"

F:\Server B\filterscripts\chiliadrace.pwn(403) : warning 217: loose indentation

F:\Server B\filterscripts\chiliadrace.pwn(409) : error 030: compound statement not closed at the end of file (started at line 376)

Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

2 Errors.

en als ik bij switch(Count)

switch(Count)

{

doe en daarna nog een } acteraan dan werkt het wel maar krijg ik direct GO GO GO

Ik heb de } ook al ergens anders neergezet maar dat werkte ook niet, case 1..3: naar case 1.3: veranderd werkte ook al niet. dus ik weet niet echt hoe ik dat moet oplossen.

Ik kan het ook terug zetten naar de vorige want het gaat me erom dat iedereen die de race heeft gejoint ook weer kan bewegen naar de countdown.

Geplaatst:
comment_1477270

Zo zou het moeten werken. Heb het niet getest, maar heb wel op errors gecontroleerd.

new Count = 30;

forward Start();
public Start()
{
if(Count == -1) { return 1; }
for(new i = 0; i < MAX_PLAYERS; i++)
{
	if(join[i] == 1)
	{
		switch(Count)
		{
			case 0:
			{
				GameTextForPlayer(i, "GO! GO! GO!", 2500, 3);
				racestart = 2;
				TogglePlayerControllable(i, 1);
			}
			case 1..3:
			{
				format(string, sizeof(string), "~r~%d", Count);
				GameTextForPlayer(i, string, 1000, 3);
				PlayerPlaySound(1, 1057, 0.0, 0.0, 0.0);
			}
			default:
			{
				format(string, sizeof(string), "~g~%d", Count);
				GameTextForPlayer(i, string, 1000, 3);
			}
		}
	}
}

if(Count >= 0) { Count--; }
SetTimer("Start", 1000, 0);
return 1;
}

Geplaatst:
  • Auteur
comment_1477611

new Count = 30; werkt helemaal niet,

Ik heb nu bovenaan staan new Count;

en bij OnFilterScriptInit staan:

Count = 30;

Maar ik krijg nog steeds GO GO GO,

Dus als iemand weet hoe ik gewoon iedereen weer op TogglePlayerControllable(playerid, 1); komt is het ook goed,

Ook al staat er voor alle spelers die gejoint zijn, toch doet hij die ene actie niet,

Zonder dat ingewikelde systeem doet de counter het prima, maar doe hij alleen maar voor spelerslot 0 TogglePlayerControllable(playerid, 1);

Dus hoe doe ik gewoon wat in mijn eerste bericht staat alleen dan met gewoon voor alle spelers TogglePlayerControllable(playerid, 1); ??

Geplaatst:
comment_1478423
new Count = 30; werkt helemaal niet,

Ik heb nu bovenaan staan new Count;

en bij OnFilterScriptInit staan:

Count = 30;

Maar ik krijg nog steeds GO GO GO,

Dus als iemand weet hoe ik gewoon iedereen weer op TogglePlayerControllable(playerid, 1); komt is het ook goed,

Ook al staat er voor alle spelers die gejoint zijn, toch doet hij die ene actie niet,

Zonder dat ingewikelde systeem doet de counter het prima, maar doe hij alleen maar voor spelerslot 0 TogglePlayerControllable(playerid, 1);

Dus hoe doe ik gewoon wat in mijn eerste bericht staat alleen dan met gewoon voor alle spelers TogglePlayerControllable(playerid, 1); ??

volgens mij kan je ook geen filterscript en gamemode in een bouwen. maja. ik zal wel weer iets fouts zeggen :D

Geplaatst:
comment_1478997

forward Start();
new Count;
new join[MAX_PLAYERS];
new CountTimer = 0;

public Start()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(join[i] == 1)
	{
		Count++;
		if(Count == 1) GameTextForPlayer(i, "~g~30", 3000, 3);
		else if(Count == 2) GameTextForPlayer(i, "~g~29", 3000, 3);
		else if(Count == 3) GameTextForPlayer(i, "~g~28", 3000, 3);
		else if(Count == 4) GameTextForPlayer(i, "~g~27", 3000, 3);
		else if(Count == 5) GameTextForPlayer(i, "~g~26", 3000, 3);
		else if(Count == 6) GameTextForPlayer(i, "~g~25", 3000, 3);
		else if(Count == 7) GameTextForPlayer(i, "~g~24", 3000, 3);
		else if(Count == 8) GameTextForPlayer(i, "~g~23", 3000, 3);
		else if(Count == 9) GameTextForPlayer(i, "~g~22", 3000, 3);
		else if(Count == 10) GameTextForPlayer(i, "~g~21", 3000, 3);
		else if(Count == 11) GameTextForPlayer(i, "~g~20", 3000, 3);
		else if(Count == 12) GameTextForPlayer(i, "~g~19", 3000, 3);
		else if(Count == 13) GameTextForPlayer(i, "~g~18", 3000, 3);
		else if(Count == 14) GameTextForPlayer(i, "~g~17", 3000, 3);
		else if(Count == 15) GameTextForPlayer(i, "~g~16", 3000, 3);
		else if(Count == 16) GameTextForPlayer(i, "~b~15", 3000, 3);
		else if(Count == 17) GameTextForPlayer(i, "~b~14", 3000, 3);
		else if(Count == 18) GameTextForPlayer(i, "~b~13", 3000, 3);
		else if(Count == 19) GameTextForPlayer(i, "~b~12", 3000, 3);
		else if(Count == 20) GameTextForPlayer(i, "~b~11", 3000, 3);
		else if(Count == 21) GameTextForPlayer(i, "~b~10", 3000, 3);
		else if(Count == 22) GameTextForPlayer(i, "~b~9", 3000, 3);
		else if(Count == 23) GameTextForPlayer(i, "~b~8", 3000, 3);
		else if(Count == 24) GameTextForPlayer(i, "~b~7", 3000, 3);
		else if(Count == 25) GameTextForPlayer(i, "~b~6", 3000, 3);
		else if(Count == 26) GameTextForPlayer(i, "~r~5", 3000, 3);
		else if(Count == 27) GameTextForPlayer(i, "~r~4", 3000, 3);
		else if(Count == 28) GameTextForPlayer(i, "~r~3", 3000, 3);PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
		else if(Count == 29) GameTextForPlayer(i, "~r~2", 3000, 3), PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
		else if(Count == 30) GameTextForPlayer(i, "~r~1", 3000, 3), PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
											CountTimer = SetTimer("Start", 1000,0); // start timer
		if(Count == 31)
		{
											   KillTimer(CountTimer); // als de count al 31 is dan stopt ie de timer
		   racestart = 2;
		   GameTextForPlayer(i, "~b~Go ~g~Go! ~r~GO!!", 2000, 3);
		   KillTimer(countstart);
		   PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
		   TogglePlayerControllable(i, 1);
		}
	}
}
}

EDIT:

new Count;
new cString[100];
new CountTimer = 0;
new join[MAX_PLAYERS];

public Start()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(join[i] == 1)
	{
		Count++;
		Format(cString, 100, "~b~Time: ~g~%d", Count);
											GameTextForAll(cString,1000,5);
		   										CountTimer = SetTimer("Start", 1000,0); // start timer
		if(Count == 31)
		{										KillTimer(CountTimer); // als de count al 31 is dan stopt ie de timer
		   racestart = 2;
		   GameTextForPlayer(i, "~b~Go ~g~Go! ~r~GO!!", 2000, 3);
		   KillTimer(countstart);
		   PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
		   TogglePlayerControllable(i, 1);
		}
	}
}
}

EDIT2:

  • Thnx GtaF voor goede uitlijning,........

Bewerkt: door Crusher!!

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

Recent actief 0

  • Er zijn hier geen geregistreerde gebruikers aanwezig.