Quote:
Originally Posted by 6momo6
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