MoveToStair Fehler bei den Tombs

05/11/2011 13:55 Eichenlaub#1
Hi,
haben ein Problem bei Tomb Runs. Und zwar telt meine sorc fröhlich durch die Tombs (Akt 2 Tal Rasha) und bleibt dann aber außerhalb eines Raumes hängen (siehe Anhang).

blöde ist, dass danach ein error kommt und das script gestoppt wird. Wie könnte ich dies beheben? Scheint ein generelles Problem zu sein mit NTMove.ntj, oder?

Jemand eine Idee?
05/11/2011 14:01 Derbeth#2
nach dem pic müsste das Muddy d2nt sein.
Also schreibs doch bitte [Only registered and activated users can see links. Click Here To Register...] rein.
Gruss Derb
05/11/2011 14:15 Eichenlaub#3
Quote:
Originally Posted by Derbeth View Post
nach dem pic müsste das Muddy d2nt sein.
Also schreibs doch bitte [Only registered and activated users can see links. Click Here To Register...] rein.
Gruss Derb
hm, stimmt schon aber ich denke dies ist ein generelles D2NT Problem, da die Funktionen von NTMove / NTTakeStair betroffen sind. Also denke ich (oder liege ich da falsch?), dass dies auch mit den anderen - auf D2NT basierenden Bots - diesen Fehler verursacht?

Wie würde die Funktion denn aussehen, wenn MoveToStairs fehlschlägt und der bot dann einfach eine alternativ Funktion aufrufen soll?

Z.b. habe ich versucht:
Code:
			if(!NTM_MoveToStair(me.areaid, 46))
			{
				NTC_SendMsgToScript("MWBotGame.ntj", NTM_MoveToStair, me.areaid, 46);
				return;
			}
			else { hier dann alternativ code
			}
			}
05/11/2011 17:43 Muddy Waters#4
Quote:
Originally Posted by Eichenlaub View Post
hm, stimmt schon aber ich denke dies ist ein generelles D2NT Problem, da die Funktionen von NTMove / NTTakeStair betroffen sind. Also denke ich (oder liege ich da falsch?), dass dies auch mit den anderen - auf D2NT basierenden Bots - diesen Fehler verursacht?

Wie würde die Funktion denn aussehen, wenn MoveToStairs fehlschlägt und der bot dann einfach eine alternativ Funktion aufrufen soll?

Z.b. habe ich versucht:
Code:
			if(!NTM_MoveToStair(me.areaid, 46))
			{
[COLOR="Red"]				NTC_SendMsgToScript("MWBotGame.ntj", NTM_MoveToStair, me.areaid, 46);
				return;[/COLOR]
			}
			else { hier dann alternativ code
			}
			}
Du scheinst da was nicht richtig verstanden zu haben, der Teil in rot wird ausgeführt, wenn die Funktion fehlschlägt, dein else-Zweig würde hingegen erreicht, wenn alles glatt läuft. ;)

Wie man das beheben könnte? Das Grundproblem vermutlich gar nicht, auch wenn ich mich zunächst mal fragen würde, wie der Char an diese Position kommt, ich kann mir irgendwie nur schwer vorstellen, dass die Pfadberechnung diesen Punkt ausspuckt.

Aber was mir dazu einfällt:
Soweit ich das in Erinnerung habe, sind diese Orte immer identisch Positionier, sprich der angrenzende Raum liegt immer südlich.

In dem Fall könnte man einfach einmal Teleport auf eben diesen Punkt casten:
Code:
if(!NTM_MoveToStair(me.areaid, 46))
{
	NTM_TeleportTo(me.x + 10, me.y + 10);
	
	if(!NTM_MoveToStair(me.areaid, 46))
	{
		NTC_SendMsgToScript("MWBotGame.ntj", NTM_MoveToStair, me.areaid, 46);
		return;
	}
}
Das könnte funktionieren, müsstest du mal ausprobieren.

LG
Muddy

P.S.: Da es hier um eine Programmierfrage geht, ist das Thema richtig platziert und hat seine Daseinsberechtigung. ;)
05/11/2011 23:56 Eichenlaub#5
Deine Script erweiterung funktioniert - Danke sehr!

Jedoch, wenn man relativ am Anfang eines Tombs in diese "Misslage" gelangt, teleportiert sich der Bot dann auch gleich zum Ausgang und nimmt das nächste Tomb in Angriff.
Dies hat jetzt weniger etwas mit deiner (sehr guten) Lösung zu tun, sondern ich denke vielmehr, bewirkt dieser "Missstand" (Spielfigur befindet sich auf einem ungültigen tile), dass der Bot einfach das "ClearLevel" abbricht. Jetzt würde ich ihm gerne sagen, dass es nicht schlimm ist außerhalb dieses Raumes zu sein, sondern als Lösung einfach 10 Felder südlich porten soll - und wenn das nicht funktioniert, dann erst die Funktion beenden.

Irgendeine Idee?
05/12/2011 00:22 Muddy Waters#6
Wo ist das Problem?

Dann wendest du einfach denselben Trick auf die ClearLevel() Funktion an, wenn der MoveTo() Aufruf dort fehlschlägt, während sich der Char in einer der Ebenen befindet.

Die Umsetzung darfst du selber austüfteln, nicht dass es hinterher heisst, ich würde dich hier geistig unterfordern. ;)

LG
Muddy