|
You last visited: Today at 13:01
Advertisement
[Release] Muddy's D2NT
Discussion on [Release] Muddy's D2NT within the Diablo 2 Programming forum part of the Diablo 2 category.
01/14/2011, 21:01
|
#556
|
elite*gold: 0
Join Date: Nov 2010
Posts: 36
Received Thanks: 16
|
Habe das Freeze-Problem auch, sehr häufig wenns Chicken greift.
|
|
|
01/14/2011, 22:34
|
#557
|
elite*gold: 139
Join Date: Oct 2006
Posts: 12,058
Received Thanks: 24,256
|
Das gleiche Problem haben bei meinem Public Bot auch viele, der Fehler liegt sehr wahrscheinlich in der NTBot.ntj. Da nutze ich dein Game Announcement Script, was mit der Version die du in diesem Bot hast ja nahezu identisch ist. Die gleichen User haben das Problem mit dem Sternenlooper D2NT nicht. Da meine Version als Grundgerüst den Sternenlooper Bot nutzt liegt also die Vermutung nahe, dass es am Entry Point liegt. Leider konnte ich noch niemanden mit dem Problem dazu bringen einen anderen Entry Point zu nutzen und mir seine Erfahrungen damit zu berichten. :/
|
|
|
01/15/2011, 13:20
|
#558
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Quote:
Originally Posted by lanara
Das gleiche Problem haben bei meinem Public Bot auch viele, der Fehler liegt sehr wahrscheinlich in der NTBot.ntj. Da nutze ich dein Game Announcement Script, was mit der Version die du in diesem Bot hast ja nahezu identisch ist. Die gleichen User haben das Problem mit dem Sternenlooper D2NT nicht. Da meine Version als Grundgerüst den Sternenlooper Bot nutzt liegt also die Vermutung nahe, dass es am Entry Point liegt. Leider konnte ich noch niemanden mit dem Problem dazu bringen einen anderen Entry Point zu nutzen und mir seine Erfahrungen damit zu berichten. :/
|
Also ich kenne das Problem eigentlich aus D2NT 1.7er Zeiten, darum bin ich recht unsicher was die Ursache angeht.
Lustigerweise habe ich mich erst jetzt hingesetzt und mal einen Workaround dazu geschrieben. Damit hatte in meiner laufenden Version bisher noch keine Situation, bei der das Fenster hing und daraufhin nicht neugestartet wurde.
Bin übrigens gerade extrem guter Dinge:
Mir ist der finale Schritt bei der Optimierung des Cubing Algorithmus gelungen, von dem ich vorher gedacht hatte, es sei nicht ohne weiteres umsetzbar. 
Seltsamerweise kam mir aber gestern Abend vorm ins Bett gehen die Lösung wie ein Geistesblitz und jetzt habe ich genau diesen Ansatz in 20min runtergeschrieben.
Ergebnis:
Die Lösung funktionierte auf Anhieb.
Der Algorithmus unterstützt nun das parallele Cubing mehrer Rezepte gleichzeitig. Auch mehrere identische Rezepte parallel sind möglich.
Ich werde das jetzt erstmal ausgiebig testen, bin aber recht guter Dinge, dass keine Konflikte auftreten werden.
Lg
Muddy
|
|
|
01/15/2011, 14:58
|
#559
|
elite*gold: 139
Join Date: Oct 2006
Posts: 12,058
Received Thanks: 24,256
|
Da freu ich mich doch schon auf die nächste Version.
|
|
|
01/15/2011, 17:58
|
#560
|
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
|
Quote:
Originally Posted by Muddy_Waters
Der Algorithmus unterstützt nun das parallele Cubing mehrer Rezepte gleichzeitig. Auch mehrere identische Rezepte parallel sind möglich. 
|
Wie funktioniert das dann? Kann man angeben wieviele maximal paralell gesammelt werden sollen? Und das als "gesamt" und für jedes einzelne Rezept? Oder basiert der Ansatz auf Wahrscheinlichkeit und er nimmt die oft droppenden Items einfach erst auf wenn er die seltenen hat? Ich stell mir das ziemlich kompliziert vor nen geigneten Kompromiss zu finden ^^
Aber das Thema an sich ist extrem spannend.
|
|
|
01/15/2011, 18:33
|
#561
|
elite*gold: 0
Join Date: Aug 2010
Posts: 141
Received Thanks: 30
|
Quote:
Originally Posted by Muddy_Waters
Also ich kenne das Problem eigentlich aus D2NT 1.7er Zeiten, darum bin ich recht unsicher was die Ursache angeht.
Lustigerweise habe ich mich erst jetzt hingesetzt und mal einen Workaround dazu geschrieben. Damit hatte in meiner laufenden Version bisher noch keine Situation, bei der das Fenster hing und daraufhin nicht neugestartet wurde.
Bin übrigens gerade extrem guter Dinge:
Mir ist der finale Schritt bei der Optimierung des Cubing Algorithmus gelungen, von dem ich vorher gedacht hatte, es sei nicht ohne weiteres umsetzbar. 
Seltsamerweise kam mir aber gestern Abend vorm ins Bett gehen die Lösung wie ein Geistesblitz und jetzt habe ich genau diesen Ansatz in 20min runtergeschrieben.
Ergebnis:
Die Lösung funktionierte auf Anhieb.
Der Algorithmus unterstützt nun das parallele Cubing mehrer Rezepte gleichzeitig. Auch mehrere identische Rezepte parallel sind möglich.
Ich werde das jetzt erstmal ausgiebig testen, bin aber recht guter Dinge, dass keine Konflikte auftreten werden.
Lg
Muddy
|
Juhu!
Das wäre dann genau das was ich mir hier gwünscht habe:
Da freue ich mich auch schon auf die nächste Version!
|
|
|
01/15/2011, 19:25
|
#562
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Quote:
Originally Posted by ldevil
Wie funktioniert das dann? Kann man angeben wieviele maximal paralell gesammelt werden sollen? Und das als "gesamt" und für jedes einzelne Rezept? Oder basiert der Ansatz auf Wahrscheinlichkeit und er nimmt die oft droppenden Items einfach erst auf wenn er die seltenen hat? Ich stell mir das ziemlich kompliziert vor nen geigneten Kompromiss zu finden ^^
Aber das Thema an sich ist extrem spannend.
|
Im Nachhinein ist die Lösung, die ich gefunden habe, eigentlich relativ simpel.
Bei dem ursprünglichen Algorithmus wird ja das Cubing Array durchlaufen, welches zuvor dem jeweiligen Rezept entsprechend mit Nullpointern initialisiert wurde.
Dabei wird das gerade betrachtet Item, bzw. dessen gid, in jedem passenden Rezept gespeichert.
Quasi eine Art Sozialismus im Kleinen, alle Rezepte müssen sich die wenigen vorhandenen Zutaten teilen, kein Rezept hat Zutaten nur für sich.
Ist beispielsweise ein PA das betrachtete Item, wird dieser auf sämtliche infrage kommenden Rezepte verteilt, welche sich dann diesen einen PA teilen.
Betrachtet man nun einen weiteren PA, bzw. durchläuft damit das Cubing Array, sind die Plätze schon durch den vorherigen PA belegt und sofern es kein Rezept gibt, welches mehrere PAs vorsieht, wird dieser zweite PA nicht aufgehoben.
Würde man also beispielsweise Caster Amulette und Schuhe gleichzeitig craften, würden der PA und das Juwel immer nur in einfacher Ausführung aufgehoben.
Meine Lösung macht nun folgendes:
Der erste PA sei wie im vorherigen Beispiel bereits in sämtlichen Rezepten hinterlegt.
Nun wird das Array mit einem weiteren PA durchlaufen.
Hat sich dieser PA nun durch die "if-Abfragen gekämpft" und ist somit in der engeren Auswahl, wird der Fall eintreten, dass der entsprechende Platz im Array nicht frei ist (bzw. nicht null ist), aber auch nicht der gid des betrachteten Items entspricht.
Wenn das der Fall ist, wird die an dieser Stelle gespeicherte gid in einem weiteren Array gespeichert.
Danach wird weiter das Cubing Array durchlaufen. Wenn es nun wieder in die engere Auswahl geht, tritt wieder der Fall von oben ein:
Das Cubing Array ist an der passenden Stelle durch den ersten PA belegt, die gid an dieser Stelle stimmt demzufolge auch nicht mit der des betrachteten PAs überein.
Nun kommt der Clou:
Es wird überprüft, ob die gid, die diese Stelle belegt, schon an anderer Stelle im Cubing Array vorgekommen ist.
Und das ist sie gerade dann, wenn sie im extra Array gespeichert wurde.
Ist dies der Fall, wird einfach die gid an der zuvor belegten Stelle durch die gid des betrachteten PAs überschrieben und die Funktion endet und gibt true zurück, sodass das betrachtete Items aufgehoben wird.
Dadurch erreicht man das Aufsammeln von Items für jedes Rezept, ohne aber die gemeinsame Benutzung von Zutaten zu behindern. 
Deshalb ist es auch eigentlich kein Kompromiss, weil die Auswirkungen ausschließlich positiv sind, man erhält nur Vorteile, keine Nachteile.
Ich kann damit beispielsweise zwei Caster Amulette gleichzeitig craften lassen, indem ich einfach das passende Rezept zweimal an das Cubing Array anhänge.
Natürlich wird es vermutlich niemals passieren, dass ich wirklich alles auf einmal finde, auch wenn der Algorithmus in seiner jetzigen Form dies zuließe und einordnen bzw. aufsammeln würde.
Ich kann aber somit direkt ein weiteres Amulett sammeln, sowie ein Juwel und eine RAL, welche sonst alle links liegen gelassen würden.
Dadurch kann ich die sonst vorhandenen Durststrecken überwinden, in denen sämtliche brauchbaren Zutaten links liegen gelassen werden, weil kein Basisitem vorhanden ist.
Indem ich nun das Rezept doppelt aktiviere, kann ich schonmal für dne nächsten Durchgang mitsammeln.
Gleichzeitig bleibt die Anzahl der aufgehobenen Zutaten aber begrenzt, der Char würde also nur maximal soviele Juwelen suchen, wie Rezepte aktiviert sind und nicht sinnlos die gesamte Truhe vollstopfen.
Die Lösung ist eigentlich sehr simpel, aber wie ich finde extrem elegant. Darum hat es wahrscheinlich auch einen Geistesblitz gebraucht, um darauf zu kommen.
Meine Tests waren bis jetzt auch recht erfolgreich, keine Probleme, dafür aber sehr viel mehr gecraftete Items als vorher.
Spannend ist das mit dem Cubing definitiv, auch wenn man anfangs etwas braucht, um sich voll reinzudenken.
Lg
Muddy
|
|
|
01/16/2011, 08:39
|
#563
|
elite*gold: 0
Join Date: Dec 2010
Posts: 9
Received Thanks: 0
|
Ich hab mal ne Frage zum Diablo skript und zwar er macht alles ordentlich so wies sein soll, aber es scheint mir die exp variante zu sein ^^ da er bei den letzten beiden Siegeln das Monster siegel nur öffnet und dann killt. Ich geb zu das schafft mein Char nicht, beim Sternenloopers öffnet er erst das 1 siegel und dann das monster siegel ich hab dann versucht vom anderen Bot das reinzukopieren aber iwie klappt das nicht.
Muddy kannst du mir sagen was ich in der Diablo datei verändern muss damit er erst das 1 siegel aufmacht und dann das monster siegel bei Venom.
Ich hab leider absolut keine Kenntnisse davon was man da programmiertechnisch machen muss.
Danke im Voraus
|
|
|
01/16/2011, 12:22
|
#564
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Quote:
Originally Posted by h1s0ka
Ich hab mal ne Frage zum Diablo skript und zwar er macht alles ordentlich so wies sein soll, aber es scheint mir die exp variante zu sein ^^ da er bei den letzten beiden Siegeln das Monster siegel nur öffnet und dann killt. Ich geb zu das schafft mein Char nicht, beim Sternenloopers öffnet er erst das 1 siegel und dann das monster siegel ich hab dann versucht vom anderen Bot das reinzukopieren aber iwie klappt das nicht.
Muddy kannst du mir sagen was ich in der Diablo datei verändern muss damit er erst das 1 siegel aufmacht und dann das monster siegel bei Venom.
Ich hab leider absolut keine Kenntnisse davon was man da programmiertechnisch machen muss.
Danke im Voraus
|
Joa, das hatte ich mal geändert, weil es in der Ursprungsvariante das reine Exp Grab ist.
Ich habe das mal schnell erweitert und ausserdem seit der letzten Version auch sonst noch ein paar Kleinigkeiten angepasst.
Code:
/**
* This file was modified by
* Check the programming section for updates and further scripts
* Last Update: 01/16/2011
*/
function NTMain()
{
Include("libs/common/NTCommon.ntl");
NTC_IncludeLibs();
NTC_IncludeConfig("NTBot/char_configs");
NT_LoadConfig();
NTSI_LoadNIPFiles("NTBot/item_configs");
NTA_Initialize();
if(!NTTM_CheckAct())
{
//MWC_GetErrorArgumentString(NTTM_CheckAct, 18);
NTC_SendMsgToScript("MWBotGame.ntj", "NTTM_CheckAct()");
return;
}
NTTMGR_TownManager();
if(!NTTM_TownMove("waypoint"))
{
//MWC_GetErrorArgumentString(NTTM_TownMove, 27);
NTC_SendMsgToScript("MWBotGame.ntj", "NTTM_TownMove()");
return;
}
if(!NTM_TakeWaypoint(107))
{
//MWC_GetErrorArgumentString(NTM_TakeWaypoint, 34, 107);
NTC_SendMsgToScript("MWBotGame.ntj", "NTM_TakeWaypoint()");
return;
}
NTP_DoPrecast(true);
if(!NTM_MoveTo(108, 7797, 5560))
{
//MWC_GetErrorArgumentString(NTM_MoveTo, 43, 108, 7797, 5560);
NTC_SendMsgToScript("MWBotGame.ntj", "NTM_MoveTo()");
return;
}
if(!MWConfig_StartAtStar)
{
var _attackpos = [7792, 5525, 7793, 5501, 7773, 5495, 7768, 5480, 7767, 5458, 7770, 5438, 7774, 5417, 7767, 5391, 7768, 5369, 7769, 5345, 7770, 5320, 7780, 5308];
if(!NTM_MoveTo(me.areaid, 7790, 5544))
{
//MWC_GetErrorArgumentString(NTM_MoveTo, 54, me.areaid, 7790, 5544);
NTC_SendMsgToScript("MWBotGame.ntj", "NTM_MoveTo()");
return;
}
if(NTConfig_PublicMode)
{
var _monsterCount = MWA_FindNearbyMonsters(20);
if(_monsterCount)
{
if(_monsterCount < 3)
Say("TP cold, " + _monsterCount + " Monsters close!");
else if(_monsterCount < 6)
Say("TP warm, " + _monsterCount + " Monsters close!");
else
Say("TP hot, " + _monsterCount + " Monsters close!");
}
else
Say("TP up, no Monsters close!");
NTM_MakeTP();
}
NTA_ClearPosition(25, false, 2);
NTM_MoveTo(me.areaid, 7790, 5544);
NTC_PingDelay(1000);
NTA_ClearPosition(25, true, 2);
NTM_MoveTo(me.areaid, 7790, 5544);
if(NTConfig_PublicMode)
{
if(MWA_FindNearbyMonsters(15) < 2)
Say("TP should be safe now!");
else
Say("TP still might be warm!");
}
for(var i = 0 ; i < _attackpos.length ; i += 2)
{
NTM_MoveTo(me.areaid, _attackpos[i], _attackpos[i+1], 3, true);
NTA_ClearPosition(35, true, 2);
}
}
NTM_MoveTo(me.areaid, 7792, 5292);
if(NTConfig_PublicMode)
{
if(MWConfig_StartAtStar)
{
var _monsterCount = MWA_FindNearbyMonsters(25);
if(_monsterCount)
{
if(_monsterCount < 3)
Say("TP cold, " + _monsterCount + " Monsters close!");
else if(_monsterCount < 6)
Say("TP warm, " + _monsterCount + " Monsters close!");
else
Say("TP hot, " + _monsterCount + " Monsters close!");
}
else
Say("TP up, no Monsters close!");
}
NTM_MakeTP();
}
NTP_DoPrecast(true);
NTA_ClearPosition(30);
NTM_MoveTo(me.areaid, 7792, 5292, 3, true);
if(!NT_OpenSealsInt())
{
//MWC_GetErrorArgumentString(NT_OpenSealsInt, 134);
NTC_SendMsgToScript("MWBotGame.ntj", "NT_OpenSealsInt()");
return;
}
if(NTConfig_PublicMode)
Say("Killing Diablo");
if(!NTM_MoveTo(me.areaid, 7792, 5292))
{
//MWC_GetErrorArgumentString(NTM_MoveTo, 144, me.areaid, 7792, 5292);
NTC_SendMsgToScript("MWBotGame.ntj", "NTM_MoveTo()");
return;
}
NTP_DoPrecast(true);
if(me.classid == NTC_CHAR_CLASS_PALADIN && !MWC_CheckForExpShrineUsers())
NTC_PutSkill(109, NTC_HAND_RIGHT);
if(!NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe))
{
//MWC_GetErrorArgumentString(NTTMGR_CheckSafe, 156, NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
NTC_SendMsgToScript("MWBotGame.ntj", "NTTMGR_CheckSafe()");
return;
}
NTC_FindUnit(NTC_UNIT_MONSTER, 243, 150);
if(!NTA_KillMonster(243))
{
MWC_GetErrorArgumentString(NTA_KillMonster, 165, 243);
NTC_SendMsgToScript("MWBotGame.ntj", "NTA_KillMonster()");
return;
}
NTSI_PickItems();
if(NTConfig_PublicMode)
Say("Next game");
NTC_SendMsgToScript("MWBotGame.ntj", "SCRIPT_END");
}
// Internal function
function NT_OpenSealsInt()
{
var i, _unit;
var _result;
_unit = GetPresetUnits(me.areaid, NTC_UNIT_OBJECT);
if(!_unit)
return false;
_result = false;
for(i = 0 ; i < _unit.length ; i++)
{
if(_unit[i].id == 396)
{
if(_unit[i].roomy*5 + _unit[i].y == 5275)
_result = NT_OpenVizierSealInt(1);
else
_result = NT_OpenVizierSealInt(2);
break;
}
}
if(!_result)
return false;
NTM_MoveTo(me.areaid, 7792, 5292, 3, true);
NTA_ClearPosition(40);
NTP_DoPrecast();
_result = false;
for(i = 0 ; i < _unit.length ; i++)
{
if(_unit[i].id == 394)
{
if(_unit[i].roomx*5 + _unit[i].x == 7773)
_result = NT_OpenDeSeisSealInt(1);
else
_result = NT_OpenDeSeisSealInt(2);
break;
}
}
if(!_result)
return false;
NTM_MoveTo(me.areaid, 7792, 5292, 3, true);
NTA_ClearPosition(40);
NTP_DoPrecast(true);
_result = false;
for(i = 0 ; i < _unit.length ; i++)
{
if(_unit[i].id == 392)
{
if(_unit[i].roomx*5 + _unit[i].x == 7893)
_result = NT_OpenVenomSealInt(1);
else
_result = NT_OpenVenomSealInt(2);
break;
}
}
return _result;
}
function NT_OpenVizierSealInt(type)
{
var i, n;
var _attackpos = [7740, 5300, 7740, 5280, 7720, 5280, 7720, 5300];
var _monstername = GetLocaleString(2851);
for(i = 0 ; i < _attackpos.length ; i += 2)
{
NTM_MoveTo(me.areaid, _attackpos[i], _attackpos[i+1], 3, true);
NTA_ClearPosition(30, true, 2);
}
for(i = 0; i < 4; i++)
{
if(!MW_OpenSeal(395) || !MW_OpenSeal(396))
{
NTC_Delay(2500);
continue;
}
if(type == 1)
NTM_MoveTo(me.areaid, 7665, 5277);
for(n = 0; n < 10; n++)
{
NTC_Delay(200);
if(NTA_KillMonster(_monstername))
{
NTA_ClearPosition();
NTSI_PickItems();
return NTM_MoveTo(me.areaid, 7750, 5280);
}
}
}
return false;
}
function NT_OpenDeSeisSealInt(type)
{
var i, n;
var _attackpos = [7780, 5255, 7800, 5255, 7800, 5235, 7780, 5235];
var _monstername = GetLocaleString(2852);
var _deSeis, _dist;
if(type == 1)
_attackpos.push(7773, 5215, 7773, 5197, 7794, 5196, 7813, 5189, 7814, 5171, 7804, 5156, 7787, 5154);
else
_attackpos.push(7811, 5216, 7810, 5197, 7787, 5192, 7772, 5183, 7773, 5166, 7784, 5154, 7800, 5154);
switch(me.classid)
{
case NTC_CHAR_CLASS_BARBARIAN:
case NTC_CHAR_CLASS_PALADIN:
_dist = 8;
break;
case NTC_CHAR_CLASS_DRUID:
_dist = 10;
break;
default:
_dist = 12;
}
for(i = 0 ; i < _attackpos.length ; i += 2)
{
NTM_MoveTo(me.areaid, _attackpos[i], _attackpos[i+1]);
NTA_ClearPosition(30, true, 2);
}
for(i = 0; i < 4; i++)
{
if(type == 1)
{
MW_OpenSeal(394);
NTM_MoveTo(me.areaid, 7771, 5196);
_deSeis = NTC_FindUnit(NTC_UNIT_MONSTER, _monstername, 3);
if(_deSeis)
{
if(!NTM_MoveTo(me.areaid, 7776, _deSeis.y + _dist))
NTM_MoveTo(me.areaid, 7776, _deSeis.y - _dist);
}
else
NTA_ClearPosition(20);
}
else
{
MW_OpenSeal(394);
NTM_MoveTo(me.areaid, 7789, 5154);
_deSeis = NTC_FindUnit(NTC_UNIT_MONSTER, _monstername, 3);
if(_deSeis && _deSeis.y + _dist <= 5201)
{
if(!NTM_MoveTo(me.areaid, 7776, _deSeis.y + _dist))
NTM_MoveTo(me.areaid, 7776, _deSeis.y - _dist);
}
else
NTM_MoveTo(me.areaid, 7776, 5195);
}
for(n = 0; n < 10; n++)
{
NTC_Delay(200);
if(NTA_KillMonster(_monstername))
{
NTA_ClearPosition(30);
NTSI_PickItems();
return NTM_MoveTo(me.areaid, 7800, 5255, 3, true);
}
}
}
return false;
}
function NT_OpenVenomSealInt(type)
{
var i, n;
var _attackpos = [7835, 5280, 7835, 5300, 7855, 5300, 7855, 5280];
var _monstername = GetLocaleString(2853);
var _sealOrder;
if(MWConfig_KillFullInfectorMob)
_sealOrder = [392, 393];
else
_sealOrder = [393, 392];
for(i = 0 ; i < _attackpos.length ; i += 2)
{
NTM_MoveTo(me.areaid, _attackpos[i], _attackpos[i+1], 3, true);
NTA_ClearPosition(30, true, 2);
}
for(i = 0; i < 4; i++)
{
if(!MW_OpenSeal(_sealOrder[0]))
{
NTM_MoveTo(me.areaid, _attackpos[_attackpos.length - 2], _attackpos[_attackpos.length - 1], 3, true);
NTC_Delay(2500);
continue;
}
if(_sealOrder[1] == 392 && !MW_OpenSeal(_sealOrder[1]))
{
NTM_MoveTo(me.areaid, _attackpos[_attackpos.length - 2], _attackpos[_attackpos.length - 1], 3, true);
NTC_Delay(2500);
continue;
}
if(type == 1)
NTM_MoveTo(me.areaid, 7892, 5298);
else
NTM_MoveTo(me.areaid, 7937, 5305);
for(n = 0 ; n < 10 ; n++)
{
NTC_Delay(200);
if(NTA_KillMonster(_monstername))
{
NTSI_PickItems();
NTA_ClearPosition(40);
if(NTC_PutSkill(124, NTC_HAND_RIGHT))
NTC_PingDelay(1000);
if(_sealOrder[1] == 393)
{
for(i = 0; i < 4; i++)
{
if(MW_OpenSeal(393))
break;
NTC_Delay(2500);
}
}
return true;
}
}
}
return false;
}
function MW_OpenSeal(classid)
{
var _seal, _x, _y, _unit;
_unit = GetPresetUnits(me.areaid, NTC_UNIT_OBJECT);
if(!_unit)
return false;
for(i = 0 ; i < _unit.length ; i++)
{
if(_unit[i].id == classid)
{
_x = _unit[i].roomx * 5 + _unit[i].x;
_y = _unit[i].roomy * 5 + _unit[i].y;
break;
}
}
NTM_MoveTo(me.areaid, _x + 1, _y + 1);
NTA_ClearPosition(25, true, 2, false, false);
_seal = NTC_FindUnit(NTC_UNIT_OBJECT, classid, 5);
if(!_seal)
return false;
if(_seal.mode > 0)
return true;
for(var i = 0; i < 8; i++)
{
if((i % 2) == 0)
{
if(GetDistance(me, _seal) > 2)
NTM_MoveTo(_seal.areaid, _seal.x + 1, _seal.y +1 );
NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
}
NTC_Delay(500);
if(_seal.mode > 0)
return true;
NTA_ClearPosition(20, true, 2, false, false);
}
return false;
}
Die neu eingeführte Config Variable MWConfig_KillFullInfectorMob musst du natürlich noch ordnungsgemäß deklarieren.
Dazu gehst du einfach in die Datei NTConfig.ntl (.../scripts/NTBot/char_configs/) und fügst dort an beliebiger Stelle:
Code:
var MWConfig_KillFullInfectorMob;
ein.
Jetzt musst du die neue Variable noch in deiner Char Config initialisieren, das kann dann zum Beispiel so aussehen:
Code:
MWConfig_Script.push(["NTDiablo.ntj", 10]); MWConfig_KillFullInfectorMob = false; MWConfig_StartAtStar = false; // false: start at entrance, true: start at star
Je nachdem ob du die Variable true oder false setzt kannst du nun festlegen, in welcher Reihenfolge die beiden letzten Siegel geöffnet werden sollen, sodass du bequem auch wieder die Exp Variante wählen kannst, wenn dein Char stärker ist.
Für einen reinen CS Char empfehle ich übrigens Hotspurs, dann klappts auch mit dem Infector.
Lg
Muddy
|
|
|
01/16/2011, 13:43
|
#565
|
elite*gold: 0
Join Date: Dec 2010
Posts: 9
Received Thanks: 0
|
Wo finde ich denn die neue upgedatete Version vom 16.01. hier im Thread hat das datum vom 18.12.2010
|
|
|
01/16/2011, 13:53
|
#566
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Quote:
Originally Posted by h1s0ka
Wo finde ich denn die neue upgedatete Version vom 16.01. hier im Thread hat das datum vom 18.12.2010
|
Gar nicht.
Die Kopfzeile gibt nur an, wann die Datei das letzte mal Verändert wurde.
Das ist in diesem Fall heute.
Das Update wird noch etwas dauern, zuviele Dinge sind noch zu unausgereift.
Lg
Muddy
|
|
|
01/16/2011, 14:16
|
#567
|
elite*gold: 0
Join Date: Dec 2010
Posts: 9
Received Thanks: 0
|
achso na dann warte ich bzw wir mal gespannt, ich muss sagen deine modifizierte Version gefällt mir bisher am besten.
|
|
|
01/18/2011, 07:00
|
#568
|
elite*gold: 0
Join Date: Nov 2010
Posts: 6
Received Thanks: 0
|
Habe seit dem letzten Update das Problem dass eigentlich fast jedes Spiel in einem Restart endet. Komme teilweise auf 70-80 Restarts bei 100 Runs.
D2 ist englisch, und mit der Version vorher wars kein Problem, da kam dass in ganz seltenen Fällen mal vor.
Im Errorlog steht nichts, und soweit ich das verstanden habe wird eigentlich ein Restart ja nur von der NTBot.ntj ausgelöst wenn beim Login was schiefgeht.
Ein Ansatz um den Fehler zu finden (Debugmodus oder so?) würde mir schon reichen erstmal.
|
|
|
01/18/2011, 14:47
|
#569
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Quote:
Originally Posted by Greekgod
Habe seit dem letzten Update das Problem dass eigentlich fast jedes Spiel in einem Restart endet. Komme teilweise auf 70-80 Restarts bei 100 Runs.
D2 ist englisch, und mit der Version vorher wars kein Problem, da kam dass in ganz seltenen Fällen mal vor.
Im Errorlog steht nichts, und soweit ich das verstanden habe wird eigentlich ein Restart ja nur von der NTBot.ntj ausgelöst wenn beim Login was schiefgeht.
Ein Ansatz um den Fehler zu finden (Debugmodus oder so?) würde mir schon reichen erstmal. 
|
Das siehst du falsch, ein Restart kann immer auftreten, wenn es zu einem unbehandelten Ausnahmefehler kommt.
Völlig entgegen dem Sinn und Zweck von Ausnahmefehlern, ist es in diesen Fällen leider meist absolut unsicher, was genau das Problem ist, es sei denn man kennt die Rahmenbedingungen und schafft es den Fehler zu reproduzieren. In dem Fall weiss man, wo man zu suchen hat.
Ich habe das Problem beispielsweise mit meinem MF Barb, die Restartquote liegt hier etwa um den Faktor 4 höher als bei meinen anderen Chars.
Leider weiss ich bislang noch nicht genau, was Auslöser dieser Restarts ist.
Darum erstmal die Frage: Welchen Char verwendest du und wo treibt dieser sich in erster Linie rum?
Lg
Muddy
|
|
|
01/19/2011, 06:52
|
#570
|
elite*gold: 0
Join Date: Nov 2010
Posts: 605
Received Thanks: 109
|
hi muddy ich hab da eine dringende frage.ich hab jetzt meinen gf-barb mit einer neuen
waffe equiped,einer eth botd warpike,zuvor hatte er 2 botd ba´s.das problem ist er killt
jetzt alles mit den ali baba schwertern,was nicht umbegingt gut ist  .
zu meiner frage.wo stelle ich das ein das er mit der pike angreift?
mit sterni klappt es normal,ich will aber deinen bot nutzen.
danke und lg loki.
|
|
|
 |
|
Similar Threads
|
[Release] D2NT 3.1 1.13c
07/17/2016 - Diablo 2 - 91 Replies
hi,
hab eben den d2nt3.1 gefunden. ein neues baba script is dabei.
release thread eon
D2NT3.1
|
[Realease] Muddy's Waypoint Catcher
08/21/2013 - Diablo 2 Programming - 46 Replies
Moin zusammen,
hier mal die erste Release Version eines kleinen Scripts genannt Waypoint Catcher. Das ganze ist jetzt nichtmal 24h alt, dementsprechend sind vermutlich noch einige Bugs vorhanden. Hinweise dazu nehme ich gerne entgegen. ;)
Features:
- Suchen sämtlicher Wegpunkte mit Ausnahme, wobei in Akt ein durch Probleme im Jail Bereich nach dem Wegpunkt Outer Cloister abgebrochen wird
- Wahlweise auch mit TP an jedem gefundenen Wp, sodass man damit auch anderen (nicht-Bots) die...
|
[D2NT] Long Dia Release
05/10/2011 - Diablo 2 Programming - 28 Replies
Ein kleines Script für diablo, es startet beim eingang macht ein tp cleart den weg zum star macht am star noch ein tp dann läufts wie das normale nur cleart es schöner :)
hoffe euch gefällts ich habs noch nicht wirklich getestet (2-3 runs) bugs können gerne hier gepostet werden verbesserungs vorschläge auch :D
installation:
1.)Script in den Bot ordner kopieren
2.)Script im editor oder vergleichbaren öffnen
3.) Msg´s anpassen (ist nicht schwer)
4.) in der char config die zeile...
|
D2NT 3.0 Pickit release
10/22/2010 - Diablo 2 - 77 Replies
edit
|
Muddy's D2NT Help
07/29/2010 - Diablo 2 - 3 Replies
hi i just started to use the bot it work's great.
how do i set up the skill's i use on my Sorc and pick up itme's?
.....
if you reply to this post please use english
|
All times are GMT +1. The time now is 13:06.
|
|