teleport bug d2nt 3.x

04/23/2010 15:51 fuuch#1
alle paar runs kann mein pala nicht porten, weil teleport nicht in der leiste ist durch den enigma re-equip bug.

frage:

scripts/libs/common/NTMove.ntl

Quote:
function NTM_TeleportTo(x, y)
{
if(NTC_CheckSkill(54) < 1)
{
ExitGame();
NTC_SendLogToOOG("Teleport Bug - Exit Game");
}
else
NTC_CastSkill(54, NTC_HAND_RIGHT, x, y);

for(var i = 0 ; i < 15 ; i++)
{
if(Math.abs(me.x-x) < 4 && Math.abs(me.y-y) < 4)
return true;

NTC_Delay(NTC_DELAY_FRAME);
}

return false;
}
ich habe den roten bereich eingefügt.
NTC_CheckSkill ist laut errormessage ingame nicht definiert.
weiß einer rat?
04/23/2010 15:56 fuuch#2
Renamed NTC_CheckSkill() to NTC_GetSkillLevel() function

gerade eben in den changenotes gelesen, mal gucken ob es was bringt ^^
04/23/2010 16:06 fuuch#3
in function NTM_MoveTo

gibt es den bereich

Quote:
if(NTC_InTown() || NTC_GetSkillLevel(54) < 1)
_teleport = false;
else
_teleport = true;
dahinter kommt dann
Quote:
if(_teleport)
{
if(NTM_TeleportTo(_path[i][0]+Random(-n, n), _path[i][1]+Random(-n, n)))
break;
}
else
{

if(NTM_WalkTo(_path[i][0], _path[i][1]))
break;


}
was genau passiert in der schleife?
04/23/2010 16:16 fuuch#4
ok habs nu hingekriegt

teleportbug fix:

Quote:
scripts/libs/common/NTMove.ntl
in
Quote:
function NTM_MoveTo
Quote:
for(i = 0 ; i < _path.length ; i++)
{
for(n = 0 ; n < 2 ; n++)
{
if(_teleport)
{
if(NTM_TeleportTo(_path[i][0]+Random(-n, n), _path[i][1]+Random(-n, n)))
break;
}
else
{
if(NTC_InTown()) {
if(NTM_WalkTo(_path[i][0], _path[i][1]))
break;
}
else {
ExitGame();
}
}
}
klappt bei mir
viel spaß damit
04/23/2010 21:23 TheBluebird#5
Also ich hab zwar die genaue Stelle gefunden, nur was genau hast du gemacht? Hast du nen Teil rausgelöscht? Oder doch nur Verändert?
Kannst du mal deine NTMove.ntl hochladen oder als code posten?
Interessiert mich brennend! :)

Gruß Blue
04/23/2010 21:34 fuuch#6
ich habe im grunde nur einen zusätzlichen if-teil im im else-teil vom _teleport hinzugefügt

Quote:
if(_teleport)
{
if(NTM_TeleportTo(_path[i][0]+Random(-n, n), _path[i][1]+Random(-n, n)))
break;
}
else
{

if(NTM_WalkTo(_path[i][0], _path[i][1]))
break;


}
Quote:
if(_teleport)
{
if(NTM_TeleportTo(_path[i][0]+Random(-n, n), _path[i][1]+Random(-n, n)))
break;
}
else
{
if(NTC_InTown()) {
if(NTM_WalkTo(_path[i][0], _path[i][1]))
break;
}
else {
ExitGame();
}
dies bewirkt beim _teleport=false , dass der bot nachdem er das portal, das aus der stadt in eine gegend mit monstern führt (der if(NTC_InTown() - teil regelt das) nochmal checkt ob er teleporten kann. falls er das nicht kann, beendet er das spiel und macht ein neues auf.

man könnte hier eine funktion hinzufügen, die enigma re-equippt, aber das ist mir zu gefährlich.
04/23/2010 21:41 TheBluebird#7
Erstmal danke für die schnelle Antwort!

Habe jetzt einfach deinen roten Teil an den jeweiligen Stellen eingefügt.
Wenn jetzt alles mit den geschweiften Klammern stimmt, sollte das hoffentlich klappen ;)

Wäre wirklich genial!

Ich bin ja dabei, einen Bot zu verbessern (siehe meine Signatur). Dürfte ich das in mein nächstes Update mit einbauen?
Würde sich selbstverständlich in den Danksagungen (Credits) in der Anleitung erwähnen!!!

Kannst mir deswegen ja mal ne PM schicken ;)

Gruß Blue
04/23/2010 21:42 fuuch#8
klar gerne, danke

ob es bei dir funktioniert, kannst du überprüfen indem du deine enigma in deine truhe packst und danach den bot anschmeist um zu gucken ob er ohne enigma bei pindle das spiel verlässt ^^
04/24/2010 01:03 fuuch#9
hat einer nen plan wie ich dem common log mitteile, dass ich gerade wegen dem teleportbug das game verlassen habe?

ich habe es mit
Quote:
sendEventToOOG("Teleportbug -_-");
versucht, aber kein erfolg damit
04/24/2010 02:23 fuuch#10
Quote:
NTC_SendLogToOOG(NTC_LOG_COMMON, "ÿc8" + "Enigmabug - quit game");
vor

Quote:
ExitGame();
und das script spammt wann es benutzt wurde
04/24/2010 16:29 TheBluebird#11
Und wo haste das jetzt nun wieder eingepackt? :D

Gruß Blue
04/24/2010 16:45 fuuch#12
die vollständige funktion, wie ich sie nun habe:

Quote:
function NTM_MoveTo(areaid, x, y, retry, clearpath)
{
var i, n;
var _teleport;
var _path;
var _retry = 0;

if(x == me.x && y == me.y)
return true;

if(arguments.length < 4)
retry = 3;

if(arguments.length < 5)
clearpath = false;

if(NTC_InTown() || NTC_GetSkillLevel(54) < 1)
_teleport = false;
else
_teleport = true;

_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

if(!_path)
return false;

for(i = 0 ; i < _path.length ; i++)
{
for(n = 0 ; n < 2 ; n++)
{
if(_teleport)
{
if(NTM_TeleportTo(_path[i][0]+Random(-n, n), _path[i][1]+Random(-n, n)))
break;
}
else
{
if(NTC_InTown()) {
if(NTM_WalkTo(_path[i][0], _path[i][1]))
break;
}
else {
NTC_SendLogToOOG(NTC_LOG_COMMON, "ÿc8" + "Enigmabug - quit game");
ExitGame();
}
}
}

if(n < 2)
{
if(clearpath)
{
if(!NTA_ClearPosition(20, true, 2))
return false;

NTP_DoPrecast(false);

NTM_MoveTo(me.areaid, _path[i][0], _path[i][1], 1);
}
}
else if(_retry < retry)
{
_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

if(!_path)
return false;

i = -1;
_retry++;
}
else
return false;
}

return true;
}
in
Quote:
D2NT2\scripts\libs\common
Quote:
NTMove.ntl
04/27/2010 14:28 fuuch#13
ich habe gerade eine verbesserte methode gefunden:

Quote:
NTMove.ntl
in:
Quote:
\D2NT\scripts\libs\common\
dies:
Quote:
if(NTC_InTown() || NTC_GetSkillLevel(54) < 1)
_teleport = false;
else
_teleport = true;
mit folgendem ersetzen:
Quote:
if(NTC_InTown())
_teleport = false;
else
_teleport = true;

if(NTC_GetSkillLevel(54) < 1)
{
ExitGame();
SendCopyData("D2NT Manager", null, 7<<16, "ÿE00000Enigma Glitch Fixed");
}
das ganze bewirkt den aufruf von exitgame() vor der rekursion und es treten keine mehrfachen meldungen auf von sendcopydata (a.k.a NTC_SendLogToOOG)

selbe wirkungsweise mit einem bugfix im bugfix :)

quelle: [Only registered and activated users can see links. Click Here To Register...]
04/27/2010 14:33 fuuch#14
hier nochmal die vollständige funktion:

Quote:
function NTM_MoveTo(areaid, x, y, retry, clearpath)
{
var i, n;
var _teleport;
var _path;
var _retry = 0;

if(x == me.x && y == me.y)
return true;

if(arguments.length < 4)
retry = 3;

if(arguments.length < 5)
clearpath = false;

if(NTC_InTown())
_teleport = false;
else
_teleport = true;

if(NTC_GetSkillLevel(54) < 1)
{
ExitGame();
SendCopyData("D2NT Manager", null, 7<<16, "ÿE00000Enigmabug- quit game");
}
_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

if(!_path)
return false;

for(i = 0 ; i < _path.length ; i++)
{
for(n = 0 ; n < 2 ; n++)
{
if(_teleport)
{
if(NTM_TeleportTo(_path[i][0]+Random(-n, n), _path[i][1]+Random(-n, n)))
break;
}
else
{
if(NTC_InTown()) {
if(NTM_WalkTo(_path[i][0], _path[i][1]))
break;
}

}
}

if(n < 2)
{
if(clearpath)
{
if(!NTA_ClearPosition(20, true, 2))
return false;

NTP_DoPrecast(false);

NTM_MoveTo(me.areaid, _path[i][0], _path[i][1], 1);
}
}
else if(_retry < retry)
{
_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

if(!_path)
return false;

i = -1;
_retry++;
}
else
return false;
}

return true;
}
04/27/2010 16:33 nibbelr#15
Für die Faulen unter euch
Skript + Backup
RS: [Only registered and activated users can see links. Click Here To Register...]

Einfach in *D2NT\scripts\libs\common einfügen und überschreiben