Timer Funktion Abfrage [HELP]

grab
Hey leute,

bin ja jetz schon etwas besser im scripten geworden und hab mir jetz einen timer included. nun hab ich alles schon fertig der timer läuft von 4:00 auf 0:0 runter. Nun möchte ich machen das er wenn er bei 0:0 ist eine funtkion ausführt die im script schon gemacht wurde namens "stopRound()".
Ich hab mich schpn in der Standart SD.gsc rumgeschaut aber da nix gutes gefunden.

Bitte um eure hilfe jetz.
serthy
pseudocode:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
roundTimer( time )
{
// stoppe die funktion wenn map/runde zuende ist oder du sie so beenden willst
	level endon( "round_end" );
	level endon( "game_ended" );
	level endon( "stop_roundTimer" );

	level.roundTimer = newHudElem();
	// jetzt hier noch den timer etwas verbessern
	level.roundTimer setTimer( int( time ) );

	startTime = getTime();

	while( getTime() - startTime <= time * 1000 )
	{
		wait( 1.0 );
	}
	// wait( int( time ) ); würde auch gehen
	
	level.roundTimer detsroy();

	level thread stopRound();
}

grab
könntest du eine kleine erklärung zu den elementen machen ?
also wie was funktioniert.


Hab alles includiert aber es geht nix. der timer wird nicht angezeigt.

Unterstützung ? grosses Grinsen

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
roundTimer( time ) {
 // stoppe die funktion wenn map/runde zuende ist oder du sie so beenden willst
level endon( "round_end" ); 
level endon( "game_ended" );
 level endon( "stop_roundTimer" );   	

level.roundTimer = newHudElem(); 	
level.roundTimer.sort = -1; 	
level.roundTimer.archived = false; 
level.roundTimer.alignX = "center"; 	
level.roundTimer.alignY = "middle"; 	
level.roundTimer.x = 320; 	
level.roundTimer.y = 260; 	
level.roundTimer.alpha = 1; 	
level.roundTimer.color = (255,160,0); 	
level.roundTimer.fontScale = 1.5; 	
level.roundTimer settimer(int ( time ) );   

startTime = getTime();  

 while( getTime() - startTime <= time * 1000 )
 { 
wait( int (time) ); 
} 
// wait( int( time ) ); würde auch gehen  
 level.roundTimer detsroy(); 
level thread maps\mp\gametypes\_zom::checkRestart();; 
 }

serthy
na soo einfach geht es nicht Augenzwinkern
ich kenn außerdem deinen mod nicht, da kann vieles schonmal schiefgehen wenn man einfach so was einfügt und das nicht klappt

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
// in SetupCvars() kommt das hin: if( getCvar( "scr_zom_roundtime") == "" ) setCvar( "scr_zom_roundtime" , "4" ); level.roundtime = getCvarInt( "scr_zom_roundtime" );
// in GameStart() funktion kommt das ganz oben hin: level thread monitorRound();
// in checkRestart() funktion müsste sowtwas rein (direkt über return true;): level notify( "round_restart" ); thread monitorRound();

monitorRound()
{
	level endon( "intermission" );
	level endon( "round_restart" );

	if( !isDefined( level.roundClock ) )
	{
		level.roundClock = newHudElem();
		level.roundClock.horzAlign = "left";
		level.roundClock.vertAlign = "top";
		level.roundClock.x = 8;
		level.roundClock.y = 22;
		level.roundClock.fontscale = 1.5;
	}

	level.roundClock setTimer( int( level.roundlimit * 60 ) );

	startTime = getTime();

	while( getTime() - startTime < level.roundlimit * 60000 )
	{
		wait( int ( 1.0 ) );
	}

	otherteam["allies"] = "axis";
	otherteam["axis"] = "allies";

	players = getentarray( "player" , "classname" );

	for( i = 0 ; i < players.size ; i++ )
	{
		player = players[i];

		if( !isDefined( player.pers["team"] ) || player.pers["team"] == "spectator" )
			continue;

		player thread showText( &"ZOM_ROUND_RESTART" );
		player thread movePlayer( otherteam[player.pers["team"]] , 4.0 );
	}

	wait( 4.0 );

	level thread monitorRound();
}



nimm das als grundlage und passe es an (achtung, keine ahnung ob alles stimmt!)

zu der erklärung:
wenn das spiel startet(neue map etc.) musst du mit als erstes monitorRound() aufrufen, da das deine runden steuert. die funktion erstellt dir deinen timer und überprüft jede sekunde ob die zeit vorrüber ist oder nicht (genauer: es checkt ob die jetzige zeit mit gettime minus der startzeit größer ist als die rundenzeit, falls ja stoppt der loop) danach werden alle aktiven spieler mit der movePlayer()-funktion aus dem zombiemod getauscht, zombies werden jäger und umgeklehrt. danach wird die funktion von sich selbst neu aufgerufen.
du müsstest noch in der movePlayer() funktion die 2 oben genannten dinge einfügen, damit jedesmal roundMonitor() funktion neu gestartet wird. und du musst die rundenzeit natürlich definieren in der setupCvars() funktion smile
das level endon( event ) stoppt und beendet die komplette funktion, sobald das entity (hier: level) etwas mit level notify( event ) zugewiesen wird.