D2NT - Realm Down umbennen

04/29/2010 11:20 6momo6#1
Hallo Leute,

Wenn Realm Down ist, will ich das der D2NT Manager, nicht irgendwas von Character Select (secs) anzeigt, sondern er soll unable to Connect anzeigen. Wie und wo muss ich das verändern??

-momo
04/29/2010 12:10 Muddy Waters#2
Quote:
Originally Posted by 6momo6 View Post
Hallo Leute,

Wenn Realm Down ist, will ich das der D2NT Manager, nicht irgendwas von Character Select (secs) anzeigt, sondern er soll unable to Connect anzeigen. Wie und wo muss ich das verändern??

-momo
Erstmal merke ich an, dass das in der Programming Sektion vermutlich besser aufgehoben wäre. Wie dem auch sei, schaun wir uns einfach mal die entsprechenden Programmteile an, die hierbei eine Rolle spielen (das findet in der NTBot.ntj statt):

Zum einen hätten wir den Case Realm Down:
Code:
case 13: // Realm Down - Character Select screen
		controlData.click(controlData.controls.characterSelect.button.exit);
		timeoutDelay(realmDownRetry*60*1000, location);
		break;
Interessant hierbei ist der Aufruf der Funktion timeoutDelay(), also schauen wir uns diese doch direkt auch mal an:
Code:
function timeoutDelay(time, location)
{
	endtime = GetTickCount() + time;

	while(endtime > GetTickCount())
	{
		sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " (" + parseInt((endtime-GetTickCount())/1000) + "s)", 0);
		Delay(1000);
	}
}
Offensichtlich nur eine simple Timerschleife, die im Sekundentakt den Status im Manager aktualisiert. Die übergebenen Parameter sind dabei time, also die Zeit, wielange die Schleife laufen soll in ms, und ein location Objekt. Letzteres macht die Sache für uns etwas komplizierter. Es wird keine einfache Variable übergeben, sondern ein ganzes Objekt. Letzteres sieht man sofort durch den Zugriff auf die Variable name durch den Punktoperator.
Somit können wir nicht einfach "Unable to Connect" als konstanten String übergeben, hier muss etwas anderes her.
Die aus meiner Sicht einfachste Variante wäre, die Funktion um einen weiteren Übergabeparameter zu erweitern, den wir nur im Falle eines Realm Downs übergeben und der ansonsten auf einen Default Wert gesetzt wird bzw. gar nicht bedachtet wird.

Wir führen also einfach mal einen neuen Übergabeparameter statusText ein.
Dieser wird nun in die Funktion implementiert, zum Beispiel so:
Code:
function timeoutDelay(time, location, statusText)
{
	if(arguments.length < 3)
		statusText = ""; // wenn kein Parameter statusText übergeben wird, initialisiere statusText als leere Zeichenkette
	
	endtime = GetTickCount() + time;

	while(endtime > GetTickCount())
	{
		// ist statusText nicht leer, gib statusText aus, ansonsten location.name
		sendEventToOOG(D2NT_MGR_PRINT_STATUS, ((statusText) ? statusText : location.name) + " (" + parseInt((endtime-GetTickCount())/1000) + "s)", 0);
		Delay(1000);
	}
}
Ich habe mal etwas kommentiert, denke so kann man ganz gut nachvollziehen wie das ganze ablaufen soll.
Nachdem dies nun geändert ist muss nurnoch der entsprechende Aufruf geändert werden, das sieht dann nach deinen Vorstellungen beispielsweise so aus:
Code:
case 13: // Realm Down - Character Select screen
		controlData.click(controlData.controls.characterSelect.button.exit);
		timeoutDelay(realmDownRetry*60*1000, location, "Unable to Connect");
		break;
Ich hoffe mal, das war das was du gesucht hast. :)
Ist hoffentlich ganz gut nachvollziehbar, ansonsten fragen. ;)

Lg
Muddy
04/29/2010 12:52 6momo6#3
Ich war schon da gewesen, aber ich wusste nicht genau wie ich das anstelle.

ich hab das jetzt umgeändert, ich denke das fuktioniert so, ich muss einfach mal einen r/d erzwingen, ob er mir genau das anzeigt.

-momo

Edit: Also der zeigt mir immer noch Character Select (secs) an.
Edit2: War mein Fehler, nun geht dad ding.
04/29/2010 13:12 Muddy Waters#4
Quote:
Originally Posted by 6momo6 View Post
Ich war schon da gewesen, aber ich wusste nicht genau wie ich das anstelle.

ich hab das jetzt umgeändert, ich denke das fuktioniert so, ich muss einfach mal einen r/d erzwingen, ob er mir genau das anzeigt.

-momo

Edit: Also der zeigt mir immer noch Character Select (secs) an.
Edit2: War mein Fehler, nun geht dad ding.
Freut mich, hatte es selbst auch nich getestet. :)

Obwohl die Vorgehensweise ja so überlegt war, dass es an sich gar nicht anders konnte als zu funktionieren. :D

Lg
Muddy