|
You last visited: Today at 06:08
Advertisement
[Release] Muddy's D2NT
Discussion on [Release] Muddy's D2NT within the Diablo 2 Programming forum part of the Diablo 2 category.
04/30/2011, 12:14
|
#1606
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Naja, was mir daran nicht gefällt ist, dass das Problem eigentlich nur umgangen wird, anstatt es wirklich zu lösen, was in dem Fall aus meiner Sicht aber machbar wäre.
Ich werde nochmal versuchen, dass bei mir zu reproduzieren und dann genau die Ursache nachvollziehen und das Problem an der Wurzel anpacken.
An dieser Stelle nochmal ein allgemeiner Hinweis:
Ich hatte hier irgendwo eine Modifikation der Funktion NTTMGR_IDItems() genannt, weil einige Probleme mit verkauften unid Items hatten.
Danach kamen Meldungen, dass Items gedroppt würden, anstatt sie beim Händler zu verkaufen. Gestern Abend habe ich dies auch bei einer meiner Sorcs enddeckt, sodass ich mir die Sache eben nochmal angeschaut habe.
Dabei musste ich feststellen, dass ich ziemlichen Unsinn von mir gegeben habe; die modifizierte Funktion enthält grobe Denkfehler - ich entschuldige mich dafür nochmal an dieser Stelle, derart dumme Fehler sollten mir eigentlich nicht passieren...
Ich bitte darum alle, die diese modifizierte Variante der oben genannten Funktion verwendet haben, diese durch folgende Funktion zu ersetzen:
Code:
function NTTMGR_IDItems(npc)
{
var _tome, _scroll;
var _result, _check;
var _items = NTT_GetUnidItems();
if(!_items || _items.length < 1)
return;
_tome = NTT_GetTome();
if(_tome && _tome.GetStat(70) < _items.length)
NTT_FillTome(npc);
for(var i = 0 ; i < _items.length ; i++)
{
switch(NTSI_CheckItem(_items[i], true))
{
case 1:
MWI_WriteManagerLog(_items[i], 0, true);
case 2:
break;
case 0:
if(_items[i].GetItemCost(1) >= 35E3)
break;
case -1:
if(_tome)
_result = NTT_IdItem(_tome, _items[i]);
else
{
_scroll = NTT_GetScroll();
if(!_scroll)
{
NTT_BuyScrolls(npc);
_scroll = NTT_GetScroll();
}
_result = NTT_IdItem(_scroll, _items[i]);
}
if(!_result)
break;
_check = NTSI_CheckItem(_items[i], true);
if(_check == 1)
MWI_WriteManagerLog(_items[i], 0, true);
else if(_check == 0 || _check == 3)
{
if(MWConfig_UseXMLItemlog)
MWI_WriteLog(_items[i], 1);
if(MWConfig_LogSoldItems)
MWI_WriteManagerLog(_items[i], 3, true);
NTT_ShopItem(_items[i], npc, 1);
}
break;
}
}
}
Dann klappts auch mit dem Verkaufen.
LG
Muddy
|
|
|
04/30/2011, 12:33
|
#1607
|
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
|
Quote:
Originally Posted by Muddy_Waters
Naja, was mir daran nicht gefällt ist, dass das Problem eigentlich nur umgangen wird, anstatt es wirklich zu lösen, was in dem Fall aus meiner Sicht aber machbar wäre.
Ich werde nochmal versuchen, dass bei mir zu reproduzieren und dann genau die Ursache nachvollziehen und das Problem an der Wurzel anpacken
|
Seh ich nicht so. Momentan macht der Bot ja folgendes:
1. Suche das magische Item für das Rezept (unlimitiert)
2. Suche Rune, Jool und Gem (unlimitiert, aber nur wenn 1. erledigt)
Das Problem ist, dass diese Reihenfolge zwar für die "komplizierten" Items wie Amu (hohes ilvl erforderlich) oder so ca. alles ausser Ringe (selten ansich) funktioniert. Weil der Bot die Items schlicht selten findet.
Entweder muss man nun für alle Rezepte eine "Priorisierung" machen (was evtl. geht aber wohl ziemlich kompliziert ist da es vom Level des Charakters und den Scripts abhängt) oder man macht es halt eben so, dass man gewisse Items limitiert. Ich denke aber nicht, dass die Limitierung ein "Umgehen" des Problems ist, auch wenn ich verstehen kann, dass du gerne eine Lösung hättest die das dynamisch ohne Limits hinbekommt.
Der Fehler tritt halt erst auf, wenn der Char ein genug hohes Level hat und somit eigentlich alle Ringe die er findet die Level Anforderungen erfüllen, was wohl bei den Amus nicht ganz so schnell der Fall ist.
Und danke für den Fix
|
|
|
04/30/2011, 12:53
|
#1608
|
elite*gold: 0
Join Date: Apr 2011
Posts: 15
Received Thanks: 0
|
Quote:
Originally Posted by Muddy_Waters
Das ist ein Bug in der Release Version. Wie das ausbessern kannst, erfährst du in  .
Ausserdem findest du  nochmal ein paar erklärende Worte zum Rush Script.
LG
Muddy
|
Vielen Dank, der zu rushende spricht jetzt mit Warriv. Allerdings stürzt dann, wenn er in den nächsten Akt wechseln will, also nach A2, immer Diablo 2 ab (Fatal Error), und ich weiß nicht, woran das liegt. (Videos habe ich installiert)
|
|
|
04/30/2011, 12:56
|
#1609
|
elite*gold: 0
Join Date: Feb 2011
Posts: 394
Received Thanks: 75
|
Quote:
Originally Posted by Gaterrrr
Vielen Dank, der zu rushende spricht jetzt mit Warriv. Allerdings stürzt dann, wenn er in den nächsten Akt wechseln will, also nach A2, immer Diablo 2 ab (Fatal Error), und ich weiß nicht, woran das liegt. (Videos habe ich installiert)
|
einfach im ntstarter bei Nosound häckchen wegmachen. Das sollte das problem beheben.
mfg
|
|
|
04/30/2011, 13:10
|
#1610
|
elite*gold: 0
Join Date: Apr 2011
Posts: 15
Received Thanks: 0
|
Quote:
Originally Posted by Shrimps in Bierteig
einfach im ntstarter bei Nosound häckchen wegmachen. Das sollte das problem beheben.
mfg
|
Vielen Dank, das hat geholfen - der Bot erreicht jetzt sicher Akt 2. Allerdings tritt hier das nächste Problem auf: Beim Zauberer macht der Rusher ein Tp auf, der zu rushende geht durchs Tp, und dann steht der Rusher dort dumm rum wie 50m Feldweg
|
|
|
04/30/2011, 13:16
|
#1611
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Quote:
Originally Posted by Gaterrrr
Vielen Dank, das hat geholfen - der Bot erreicht jetzt sicher Akt 2. Allerdings tritt hier das nächste Problem auf: Beim Zauberer macht der Rusher ein Tp auf, der zu rushende geht durchs Tp, und dann steht der Rusher dort dumm rum wie 50m Feldweg
|
Beweg den Quester mal 1, 2 Schritte oder sorg dafür, dass er getötet wird.
Klingt komisch, aber speziell dort neigt die API dazu, die Unit des Questers nicht zu finden, nachdem dieser direkt durchs TP gekommen ist.
@ldevil
Ich werde die Ursache jetzt mal schnell analysieren, deiner Argumentation kann ich nicht folgen, vom Cubing Algorithmus her ist die Sache klar limitiert, das Problem liegt in der itemloc der Items bei der Initialisierung - soweit habe ich es jedenfalls gesehen, als ich das letzte mal einen flüchtigen Blick drauf geworfen habe.
Irgendwas war auch besonders wichtig bei der Initialisierung, blöderweise habe ich es mir nicht dazugeschrieben, ich bin aber sicher, dasman auf irgendwas achten musste.
LG
Muddy
|
|
|
04/30/2011, 13:35
|
#1612
|
elite*gold: 0
Join Date: Nov 2010
Posts: 17
Received Thanks: 1
|
Dropp statt Sell
Also irgent wie schmeist meine Sorc immer noch alles raus nach dem identifizieren mhm dabei meine ich alles ersetzt zu haben was du eine seite voher gepostet hast.
|
|
|
04/30/2011, 13:39
|
#1613
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Quote:
Originally Posted by AndreundNina
Also irgent wie schmeist meine Sorc immer noch alles raus nach dem identifizieren mhm dabei meine ich alles ersetzt zu haben was du eine seite voher gepostet hast.
|
Edit:
Kommando zurück, verlesen.
Kannst du mal ein bisschen mehr Infos geben?
Unter welchen Umständen passiert das? Welcher Akt? Wieviele Items hat der Char in etwa dabei?
Wie sehen deine Configs aus?
LG
Muddy
|
|
|
04/30/2011, 13:41
|
#1614
|
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
|
Quote:
Originally Posted by Muddy_Waters
@ldevil
Ich werde die Ursache jetzt mal schnell analysieren, deiner Argumentation kann ich nicht folgen, vom Cubing Algorithmus her ist die Sache klar limitiert, das Problem liegt in der itemloc der Items bei der Initialisierung - soweit habe ich es jedenfalls gesehen, als ich das letzte mal einen flüchtigen Blick drauf geworfen habe.
Irgendwas war auch besonders wichtig bei der Initialisierung, blöderweise habe ich es mir nicht dazugeschrieben, ich bin aber sicher, dasman auf irgendwas achten musste.
LG
Muddy
|
Hm, ok ich seh meinen Denkfehler, muss es mir wohl doch noch einmal ansehen ^^
edit:
Eigentlich geht's doch nur um den Abschnitt:
Code:
[B][I][COLOR="Navy"]if[/COLOR][/I][/B](_classid == NTConfig_CubingItem[i][1]) [COLOR="DarkGreen"]// Check Magic Item (Amu, Ring, ...)[/COLOR]
{
[B][I][COLOR="Navy"]if[/COLOR][/I][/B]((result == [COLOR="Red"]0[/COLOR] || result == [COLOR="Red"]3[/COLOR]) && item.quality == [COLOR="Red"]4[/COLOR] && _calclevel >= _NTCU_CraftRecipe[_index][[COLOR="Red"]0[/COLOR]])
{
[B][I][COLOR="Navy"]if[/COLOR][/I][/B](NTConfig_CubingItem[i][[COLOR="Red"]2[/COLOR]] == null)
{
NTConfig_CubingItem[i][[COLOR="Red"]2[/COLOR]] = _gid;
_result = [B][I][COLOR="Navy"]true[/COLOR][/I][/B];
}
[B][I][COLOR="Navy"]else[/COLOR][/I][/B] [B][I][COLOR="Navy"]if[/COLOR][/I][/B](NTConfig_CubingItem[i][[COLOR="Red"]2[/COLOR]] == _gid && NTCU_CheckItemCount(_classid,[COLOR="Red"]4[/COLOR],_NTCU_CraftRecipe[_index][[COLOR="Red"]0[/COLOR]]))
_result = [B][I][COLOR="Navy"]true[/COLOR][/I][/B];
[B][I][COLOR="Navy"]else[/COLOR][/I][/B] [B][I][COLOR="Navy"]if[/COLOR][/I][/B](MWConfig_UseAdvancedCubingAlgorithm)
{
[B][I][COLOR="Navy"]if[/COLOR][/I][/B](_checkedGids.indexOf(NTConfig_CubingItem[i][[COLOR="Red"]2[/COLOR]]) > [COLOR="Red"]-1[/COLOR])
{
NTConfig_CubingItem[i][[COLOR="Red"]2[/COLOR]] = _gid;
[B][I][COLOR="Navy"]return[/COLOR][/I][/B] [B][I][COLOR="Navy"]true[/COLOR][/I][/B];
}
[B][I][COLOR="Navy"]else[/COLOR][/I][/B]
_checkedGids.push(NTConfig_CubingItem[i][[COLOR="Red"]2[/COLOR]]);
}
}
}
Wenn wir jetzt annehmen, der Bot findet immer nur Ringe (als Beispiel) sprich vercubt keine, dann läuft das doch so ab:
Den ersten Ring behält er, weil ja noch keine GID eingetragen ist und trägt die GID ein. Nun passiert nix bis ein weiterer gefunden wird.
Wird ein 2. Ring gefunden, so wird die GID vom 1. Ring in die Liste eigetragen und der 2. Ring weggeworfen.
Wird nun ein 3. Ring gefunden, so steht die GID ja in der Liste und der 3. Ring wird behalten und von nun an als "1. Ring" geführt.
Sprich eigentlich wirft der Bot einfach jedes 2. Item weg?
Oder hab ich schon wieder einen Denkfehler?
edit: Ok der Denkfehler war: das wird ja jeweils pro Item gemacht über alle Rezepte und nicht über alle Items...
edit2: Warum natürlich das Init das Problem ist, weil die Items nicht korrekt initialisiert werden. Wobei ich die Init Funktion gar nicht kapier. Eigentlich muss man doch einfach alle Items die in der Kiste / Inventar liegen rasch überprüfen. Oder hab ich schon wieder nen Denkfehler?
Code:
_items = me.GetItems();
if(!_items)
return false;
for(i = 0; i < _items.length; i++)
{
if(_items[i].mode == 0)
{
if(_items[i].itemloc == 0 || _items[i].itemloc == 4)
{
NTSI_CheckItem(_items[i], true);
}
}
}
Ok, evtl. müsste man statt dem Inventar den Cube dazu nehmen, weil das Inventar wird ja eh danach überprüft...
|
|
|
04/30/2011, 14:59
|
#1615
|
elite*gold: 0
Join Date: Apr 2011
Posts: 3
Received Thanks: 0
|
Quote:
Originally Posted by ldevil
Das muss auch so heissen:
Code:
MWConfig_Script.push([[COLOR="DimGray"]"NTPindleskin.ntj"[/COLOR], [COLOR="Red"]10[/COLOR]]); NTConfig_NihlathakExtension = [COLOR="Navy"][B][I]false[/I][/B][/COLOR]
|
Jo die hätte geklappt wenn das rote Portal noch da gewesen währe
Könnte man die Standart Nihlathak.ntj noch so ändern, das er immer Nihlathak überspringt  ?
|
|
|
04/30/2011, 15:07
|
#1616
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Wollte gerade sagen, irgendwas siehst du da falsch.
Ich nenne hier ja gerne das Schubladen Modell, weil das die aus meiner Sicht anschaulichste Möglichkeit ist, sich das vorzustellen.
Jedes aktive Rezept ist eine Schublade.
Alle Items auf dem Char werden durchlaufen, wobei ein Item, dass für ein Rezept geeignet ist, erstmal auf sämtliche Schubladen verteilt wird, in die es passt.
Meine Erweiterung kontrolliert nun diese Schubladen und prüft dabei, ob ein Item bereits in einer anderen Schublade liegt. Wenn ja, besteht die Möglichkeit das derzeit betrachtete Item in die derzeit betrachtete Schublade abzulegen und so das alte, mehrfach vorkommende Item, zu ersetzen.
Letztenendes werden so auch Items für verschiedene Rezepte aufgehoben, als beispielsweise nur ein Jewel für sämtliche Rezepte vorzusehen.
Trotzdem können so aber nicht mehr Items aufgehoben werden, als tatsächlich auch für Rezepte benötigt werden, der Bug entsteht nicht dadurch.
Ich habe den Fehler zwar eben nicht reproduzieren können, dennoch glaube ich es soweit analysiert zu haben, um sagen zu können, was das Problem auslöst.
Dazu muss man sich zunächst die Initialisierung des Cubing Arrays respektive der "Schubladen" anschauen. Dort fällt auf, dass zunächst Items aus dem Inventar einsortiert und erst danach Items aus der Truhe betrachtet werden.
Das habe ich so umgesetzt, weil es sonst Probleme gibt, in Verbindung mit Items, die nur in begrenzter Menge aufgehoben werden und der Festlegung, nur solche Items zum Cuben zu verwenden, welche nicht aufgehoben werden sollen.
Grundsätzlich findet die Initialisierung des Cubing Arrays zu Beginn eines jeden Bot Scripts statt. Aus irgendeinem Grund wird aber in der NTTMGR_TownManager() Funktion nochmal initialisiert.
Wobei man dazu sagen muss, dass dies nur unter gewissen Annahmen zu dem Problem führen kann.
Es müssen nämlich die identifizierten und nicht benötigten Items bzw. Ringe noch im Inventar liegen und dieser Fall tritt gerade dann ein, wenn die nicht benötigten Items aufgrund entsprechender Einstellungen gedroppt werden oder aber aufgrund des gerade behobenen Bugs während der der Identifizierung, im Inventar verbleiben.
Findet nun eine erneute Initialisierung statt, werden sämtliche Items aus dem Inventar, die für irgendwelche Rezepte geeignet sind, auch für diese eingeplant und entsprechend gestasht.
Die bereits gestashten Ringe verbleiben einfach wo sie sind, auch wenn sie nicht direkt für Rezepte eingeplant sind, einfach weil gestashte Items nicht mehr angerührt werden.
Lösung des Problems ist einfach das Entfernen der entsprechenden zusätzlichen Initialisierung. Bisher sehe ich noch keine dadurch entstehenden Probleme, aber ich schaue mir die Sache trotzdem nochmal an.
LG
Muddy
|
|
|
04/30/2011, 15:11
|
#1617
|
elite*gold: 0
Join Date: Sep 2009
Posts: 148
Received Thanks: 21
|
Hey Muddy, hab da grad nen Fehler im Itemparcer.
Bei Diablo is nen Ormus Gewänder gedroppt, jedoch hat der Bot sofort gestoppt und hat den Fehler hier ausgegeben:
Gibts da was von Muddys?
Achja:
Code:
{
var i;
var _identified;
var _result = 0;
var _quantity, _quantityString, _replacedCheckListItem, _specs;
_identified = item.itemflag & 0x10;
if(arguments.length < 2)
checkQuantity = false;
if(arguments.length < 3)
nipDebug = false;
for(i = 0 ; i < _NTIP_CheckList.length ; i++)
{
if(_NTIP_CheckList[i][0].length > 0)
{
if(_NTIP_CheckList[i][0].indexOf("maxquantity") == -1)
{
if(eval(_NTIP_CheckList[i][0]))
{
if(_NTIP_CheckList[i][1].length > 0)
{
->Zeile 93: if(eval(_NTIP_CheckList[i][1]))
{
if(nipDebug)
return new Array(1, _NTIP_CheckList[i][2], _NTIP_CheckList[i][3], _NTIP_CheckList[i][4], _NTIP_CheckList[i][0] + " && " + _NTIP_CheckList[i][1]);
return 1;
}
else if(!_identified && _result == 0)
_result = -1;
}
else
{
if(nipDebug)
return new Array(1, _NTIP_CheckList[i][2], _NTIP_CheckList[i][3], _NTIP_CheckList[i][4], _NTIP_CheckList[i][0]);
return 1;
}
}
}
|
|
|
04/30/2011, 15:16
|
#1618
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
In dem Fall sind deine .nips fehlerhaft - zumindest teilweise.
Versuchs mal mit der .nip Check Erweiterung aus dem zweiten Post. 
Zusatzinformationen dazu sollten sich per Suchfunktion finden lassen.
LG
Muddy
|
|
|
04/30/2011, 15:46
|
#1619
|
elite*gold: 0
Join Date: Apr 2011
Posts: 15
Received Thanks: 0
|
@Muddy: Wenn ich den Rusher in Richtung Wizard move, dann macht er manchmal automatisch weiter, wenn nicht, dann hilft es, den Quester zu moven / sterben zu lassen.
Darf man in naher oder ferner Zukunft mit einer Verbesserung des Rush-Scripts @ Wizard rechnen? Denn es wäre wirklich besser, wenn man nichts machen müsste, beim Rush-Bot. ;-)
Und um dann nochmal auf den D2NT Log zurück zu kommen: Mit dem Cuben hattet ihr recht, da ist es normal, dass die Essence nicht angezeigt werden. Allerdings ist mir aufgefallen, dass der Log zeitversetzt geschrieben wird. Teilweise 20 Minuten - so lange dauert ein Run bei meinem Bot. Darf ich deshalb annehmen, dass der Bot erst nach dem Beenden aller Scripts und nach dem Verlassen des Games in die Log beim D2NT Manager die aufgehobenen Items einträgt?
|
|
|
04/30/2011, 15:51
|
#1620
|
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
|
Quote:
Originally Posted by jentownhh
Jo die hätte geklappt wenn das rote Portal noch da gewesen währe
Könnte man die Standart Nihlathak.ntj noch so ändern, das er immer Nihlathak überspringt  ?
|
Hast du das Nila Script mit "Skip on Tomb Vipers"? wenn ja, setzt den ausdruck da im if(...) einfach auf if(false) ist etwas ineffizient aber schnell umgestellt. dann geht er runter sagt "skip" und geht danach wieder hoch zu pindle
@Muddy: Ok, ez hab ich's glaubs einigermassen kapiert. Auch wenn ich noch nicht erkannt hab wieso die Reihenfolge der Initialisierung wichtig ist. Aber das hab ich mir auch net angeschaut um ehrlich zu sein.
Mein "fix" verhindert, dass mein Bot alle 2 Games mult weil alles voller Ringe ist, das passt für mich für's erste
|
|
|
 |
|
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 06:09.
|
|