|
You last visited: Today at 23:16
Advertisement
Verbessertes Stashen
Discussion on Verbessertes Stashen within the Diablo 2 Programming forum part of the Diablo 2 category.
10/03/2010, 22:54
|
#1
|
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
|
Verbessertes Stashen
Viele wird's wohl nicht interessieren, aber mir geht der Algorithmus der zum Stashen verwendet wird auf den Kecks. Denn so bleibt bei mir am Ende oft die untersten Reihen frei und ich hab was "grossen" im Inventar wodurch ich viel öfters in die Stadt identen muss.
Hab daher die Variante vom mmBot implementiert, der die Kiste in 3 Zweierreihen unterteilt und alles nur in diese packt (sprich nicht dazwischen) und bei der ganz links oben beginnt, dann die mittlere und erst am ende die rechte vollpackt.
Waren nur paar kleine Änderungen in der NTTown.ntl
Code:
function NTT_ManageStash(invitem)
{
var i, x, y[COLOR="Red"], z[/COLOR];
var _items;
var _stashall;
var StashHeight = (me.gametype == 0) ? 4 : 8;
var _ignorestring = _NTT_IgnoredItems.join();
var _ignoreitem;
if(!GetUIState(0x19))
return false;
if(arguments.length < 1)
_stashall = true;
else
_stashall = false;
if(!NTC_StashGoldFull() && NTC_MyGoldCarry() > NTConfig_MinGoldToStash)
{
var _mygold = NTC_MyGoldCarry();
Gold(3, _mygold);
for(i = 0 ; i < 2 ; i++)
{
NTC_Delay(500);
if(_mygold > NTC_MyGoldCarry())
break;
}
}
var _stashspace = new Array(StashHeight);
for(y = 0 ; y < StashHeight ; y++)
_stashspace[y] = new Array(6);
for(y = 0 ; y < StashHeight ; y++)
{
for(x = 0 ; x < 6 ; x++)
_stashspace[y][x] = 0;
}
_items = me.GetItems();
if(!_items)
return false;
for(i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].itemloc == 4)
{
for(y = 0 ; y < _items[i].ysize ; y++)
{
for(x = 0 ; x < _items[i].xsize ; x++)
_stashspace[y+_items[i].y][x+_items[i].x] = 1;
}
}
}
for(i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].itemloc == 0 && (_stashall || (_items[i].x == invitem.x && _items[i].y == invitem.y)))
{
if(_stashall)
{
_ignoreitem = (NTConfig_Columns[_items[i].y][_items[i].x] == 0);
if(!_ignoreitem)
{
if(_ignorestring.indexOf(_items[i].code) != -1 || NTSI_CheckItem(_items[i]) <= 0 || NTSI_CheckItem(_items[i], -1) == 3)
_ignoreitem = true;
}
}
else
_ignoreitem = false;
if(!_ignoreitem)
{
_itemdone = false;
[COLOR="Red"] for(z = 0 ; z < 3; z++)
{[/COLOR]
for(y = 0 ; y < StashHeight ; y++)
{
if(_itemdone)
break;
for(x = 0 ; x < [COLOR="Red"](3 - _items[i].xsize)[/COLOR] ; x++)
{
[COLOR="Red"] var xx = 2*z + x;[/COLOR]
if(_itemdone)
break;
if(_stashspace[y][[COLOR="Red"]xx[/COLOR]] == 0)
{
if(([COLOR="Red"]xx[/COLOR]+_items[i].xsize-1) < 6 && (y+_items[i].ysize-1) < StashHeight)
{
var _havespace = true;
for(m = 0 ; m < _items[i].ysize ; m++)
{
for(n = 0 ; n < _items[i].xsize ; n++)
{
if(_stashspace[y+m][[COLOR="Red"]xx[/COLOR]+n] == 1)
{
_havespace = false;
m = 4;
break;
}
}
}
if(_havespace)
{
if(NTC_ItemToCursor(_items[i]))
{
for(n = 0 ; n < 80 ; n++)
{
if((n % 40) == 0)
me.ClickItem(0, [COLOR="Red"]xx[/COLOR], y, 4);
NTC_Delay(100);
if(!me.itemoncursor)
break;
}
if(n < 80)
{
for(m = 0 ; m < _items[i].ysize ; m++)
{
for(n = 0 ; n < _items[i].xsize ; n++)
_stashspace[y+m][[COLOR="Red"]xx[/COLOR]+n] = 1;
}
}
NTC_PingDelay(200);
}
_itemdone = true;
}
}
}
}
}
[COLOR="Red"]}[/COLOR]
}
if(!_stashall)
return true;
}
}
return true;
}
Hab die Änderungen rot markiert, war wirklich nicht viel.
|
|
|
10/18/2010, 18:58
|
#2
|
elite*gold: 0
Join Date: Jun 2009
Posts: 10
Received Thanks: 2
|
always hated the way d2nt managed stash and thought turbot and mmbot did a much better job, but never got around to looking into changing it
nice work!!!
|
|
|
10/20/2010, 15:43
|
#3
|
elite*gold: 0
Join Date: Oct 2010
Posts: 23
Received Thanks: 0
|
oh mann das such ich genau das
*U MADE MY DAY PERFEKT*
nur noch hinbekommen :/
|
|
|
10/20/2010, 19:58
|
#4
|
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
|
Quote:
Originally Posted by W33DB0X
oh mann das such ich genau das
*U MADE MY DAY PERFEKT*
nur noch hinbekommen :/
|
Ach komm, so kompliziert ist das nicht. Aber freut mich, dass es einige brauchen
|
|
|
10/20/2010, 23:41
|
#5
|
elite*gold: 0
Join Date: Oct 2010
Posts: 23
Received Thanks: 0
|
Quote:
Originally Posted by ldevil
Ach komm, so kompliziert ist das nicht. Aber freut mich, dass es einige brauchen 
|
wenn mann 5 tage erst mi d2nt arbeitet und auf HC bottet kann alles kleine große wirkung haben ! XD
@ MoM
Soso 1 = 78
Soso 2 = 73
|
|
|
10/21/2010, 00:10
|
#6
|
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
|
Quote:
Originally Posted by W33DB0X
wenn mann 5 tage erst mi d2nt arbeitet und auf HC bottet kann alles kleine große wirkung haben ! XD

|
Zum Glück stashed er normalerweise in der Stadt  Oder man testet es mit nem SC Char.
Aber ich wünsch deinem Char ein langes Leben
|
|
|
12/26/2010, 20:35
|
#7
|
elite*gold: 0
Join Date: Jan 2009
Posts: 3,170
Received Thanks: 1,191
|
schick schick, Thanks
|
|
|
12/26/2010, 20:56
|
#8
|
elite*gold: 0
Join Date: Mar 2009
Posts: 382
Received Thanks: 45
|
super genau das was ich gesucht hab, thx :=)
|
|
|
12/27/2010, 14:32
|
#9
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
|
Schick, irgendwann wollte ich mir das auch mal anschauen, bin dann aber wie so oft drüber weg gekommen.
Ich werde mir das mal abgucken, wenn es genehm ist.
Lg
Muddy
|
|
|
12/27/2010, 18:27
|
#10
|
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
|
Quote:
Originally Posted by Muddy_Waters
Schick, irgendwann wollte ich mir das auch mal anschauen, bin dann aber wie so oft drüber weg gekommen.
Ich werde mir das mal abgucken, wenn es genehm ist.
Lg
Muddy
|
Solange du nicht vor hast es zu verkaufen
|
|
|
12/29/2010, 00:26
|
#11
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
|
Ich habe das ganze mal mit ein paar Copy&Paste Handgriffen erweitert, sodass nun Items, die zum Cuben aufgehoben werden, von unten rechts an einsortiert werden.
Grundgedanke war, dass man damit der Entstehung von "Löchern", die durch eingepackte und später vercubte gems und Runen entstehen, durch eine räumliche Trennung etwas vorbeugt. So entstehen die "Löcher" dann dort, wo ohnehin immer gems und Runen nachgelegt werden.
Ob das den gewünschten Effekt auch tatsächlich erzielen kann oder ob es ziemlicher Unsinn ist, weiss ich noch nicht, aber rein vom Ablauf her scheint das schon ganz gut zu funktionieren.
Falls es jemand testen möchte:
Code:
function NTT_ManageStash(invitem)
{
var i, x, y, z, xx;
var _items;
var _stashall;
var StashHeight = (me.gametype == 0) ? 4 : 8;
var _ignorestring = _NTT_IgnoredItems.join();
var _ignoreitem;
if(!GetUIState(0x19))
return false;
if(arguments.length < 1)
_stashall = true;
else
_stashall = false;
if(!NTC_StashGoldFull() && NTC_MyGoldCarry() > NTConfig_MinGoldToStash)
{
var _mygold = NTC_MyGoldCarry();
Gold(3, _mygold);
for(i = 0 ; i < 2 ; i++)
{
NTC_Delay(500);
if(_mygold > NTC_MyGoldCarry())
break;
}
}
var _stashspace = new Array(StashHeight);
for(y = 0; y < StashHeight; y++)
_stashspace[y] = new Array(6);
for(y = 0; y < StashHeight; y++)
{
for(x = 0; x < 6; x++)
_stashspace[y][x] = 0;
}
_items = me.GetItems();
if(!_items)
return false;
for(i = 0; i < _items.length; i++)
{
if(_items[i].mode == 0 && _items[i].itemloc == 4)
{
for(y = 0; y < _items[i].ysize; y++)
{
for(x = 0; x < _items[i].xsize; x++)
_stashspace[y + _items[i].y][x + _items[i].x] = 1;
}
}
}
for(i = 0; i < _items.length; i++)
{
if(_items[i].mode == 0 && _items[i].itemloc == 0 && (_stashall || (_items[i].x == invitem.x && _items[i].y == invitem.y)))
{
if(_stashall)
{
_ignoreitem = (NTConfig_Columns[_items[i].y][_items[i].x] == 0);
if(!_ignoreitem)
{
if(_ignorestring.indexOf(_items[i].code) != -1 || NTSI_CheckItem(_items[i]) <= 0 || NTSI_CheckItem(_items[i], -1) == 3)
_ignoreitem = true;
}
}
else
_ignoreitem = false;
if(!_ignoreitem)
{
_itemdone = false;
if(NTSI_CheckItem(_items[i]) == 1)
{
for(z = 0; z < 3; z++)
{
for(y = 0; y < StashHeight; y++)
{
if(_itemdone)
break;
for(x = 0; x < 3 - _items[i].xsize; x++)
{
xx = 2*z + x;
if(_itemdone)
break;
if(_stashspace[y][xx] == 0)
{
if((xx + _items[i].xsize - 1) < 6 && (y + _items[i].ysize - 1) < StashHeight)
{
var _havespace = true;
for(m = 0; m < _items[i].ysize; m++)
{
for(n = 0; n < _items[i].xsize; n++)
{
if(_stashspace[y + m][xx + n] == 1)
{
_havespace = false;
m = 4;
break;
}
}
}
if(_havespace)
{
if(NTC_ItemToCursor(_items[i]))
{
for(n = 0; n < 80; n++)
{
if((n % 40) == 0)
me.ClickItem(0, xx, y, 4);
NTC_Delay(100);
if(!me.itemoncursor)
break;
}
if(n < 80)
{
for(m = 0; m < _items[i].ysize; m++)
{
for(n = 0; n < _items[i].xsize; n++)
_stashspace[y + m][xx + n] = 1;
}
}
NTC_PingDelay(200);
}
_itemdone = true;
}
}
}
}
}
}
}
else
{
for(z = 2; z >= 0; z--)
{
for(y = StashHeight - 1; y >= 0; y--)
{
if(_itemdone)
break;
for(x = 2 - _items[i].xsize; x >= 0; x--)
{
xx = 2*z + x;
if(_itemdone)
break;
if(_stashspace[y][xx] == 0)
{
if((xx + _items[i].xsize - 1) < 6 && (y + _items[i].ysize - 1) < StashHeight)
{
var _havespace = true;
for(m = 0; m < _items[i].ysize; m++)
{
for(n = 0; n < _items[i].xsize; n++)
{
if(_stashspace[y + m][xx + n] == 1)
{
_havespace = false;
m = 4;
break;
}
}
}
if(_havespace)
{
if(NTC_ItemToCursor(_items[i]))
{
for(n = 0; n < 80; n++)
{
if((n % 40) == 0)
me.ClickItem(0, xx, y, 4);
NTC_Delay(100);
if(!me.itemoncursor)
break;
}
if(n < 80)
{
for(m = 0; m < _items[i].ysize; m++)
{
for(n = 0; n < _items[i].xsize; n++)
_stashspace[y + m][xx + n] = 1;
}
}
NTC_PingDelay(200);
}
_itemdone = true;
}
}
}
}
}
}
}
}
if(!_stashall)
return true;
}
}
return true;
}
Lg
Muddy
|
|
|
12/29/2010, 15:02
|
#12
|
elite*gold: 0
Join Date: Nov 2010
Posts: 108
Received Thanks: 0
|
hallo,
ich habe einfach mal dein code von oben getest.
also ich bekomme folgende fehlermeldung, wenn er von einem vollen mule char auf den nächsten wechseln will.
gruss
|
|
|
12/29/2010, 15:11
|
#13
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
|
Quote:
Originally Posted by Kobold2
hallo,
ich habe einfach mal dein code von oben getest.
also ich bekomme folgende fehlermeldung, wenn er von einem vollen mule char auf den nächsten wechseln will.
gruss
|
Wäre interessant zu wissen, welche Funktion bei dir in Zeile 1794 steht.
Obige Sortierfunktion bricht nämlich ab, wenn der Objektzeiger dem Nullzeiger entspricht. Und zwar bevor damit weitergearbeitet wird, darum kann die Funktion diesen Fehler der Theorie nach gar nicht verursachen.
Ich würde vermuten die Fehlermeldung bezieht sich auch eine andere Funktion oder du hast schlicht Teile der Funktion vergessen.
Um mehr zu sagen, bräuchte man mehr Input.
Lg
Muddy
|
|
|
12/29/2010, 15:12
|
#14
|
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
|
Hm, nur damit ich das richtig verstehe - weil ich müsste bei mir dann auch noch nen anderen Algo entsprechend anpassen - wie räumt er die Stash nun genau ein?
Alles was er "normal" aufhebt von links oben jeweils in den 2er Reihen und alles was er zum Cuben braucht wie eth Armros, Runen, Gems und so von rechts unten eben falls in den 2er Reihen? Oder macht er was anders? Ob's wirklich ne Rolle spielt ist dann natürlich die Frage dich ich mir noch stellen muss, wobei das mit AutoMule eh nicht soo relevant ist
Aber klint interessant, muss ich mir mal etwas genauer überlegen, wann es was bringen könnte.
|
|
|
12/29/2010, 16:58
|
#15
|
elite*gold: 0
Join Date: Nov 2010
Posts: 108
Received Thanks: 0
|
Quote:
Originally Posted by Muddy_Waters
Wäre interessant zu wissen, welche Funktion bei dir in Zeile 1794 steht.
Obige Sortierfunktion bricht nämlich ab, wenn der Objektzeiger dem Nullzeiger entspricht. Und zwar bevor damit weitergearbeitet wird, darum kann die Funktion diesen Fehler der Theorie nach gar nicht verursachen.
Ich würde vermuten die Fehlermeldung bezieht sich auch eine andere Funktion oder du hast schlicht Teile der Funktion vergessen.
Um mehr zu sagen, bräuchte man mehr Input.
Lg
Muddy
|
Hallo,
erstmal muss ich zugeben, dass ich mich oben etwas falsch ausgedrückt habe, denn die meldung kommt von dem neuen, leeren mule char. also der bot ist voll -> macht nen mule game auf -> der mule char sammelt die sachen auf bis auch er voll ist -> nächster mule char logt sich ein -> fehlermeldung.
also in zeile 1794 steht bei mir:
for(var i = 0 ; i < _items.length ; i++)
ich habe einfach den ihnalt der box bei mir ersetzt. nicht mehr und nicht weniger
ps: noch ne kurze andere frage:
ab wann wechselt der bot von einem mule char auf den anderen? also ab wann gilt ein mule char als voll? weil der wechselt auf den anderen mule char, auch wenn beim ersten mule char noch das ganze inventar frei ist.
peace
|
|
|
 |
|
Similar Threads
|
[HowTo]Verbessertes Startset
07/09/2011 - Metin2 PServer Guides & Strategies - 18 Replies
Hallo liebe Com.
Da das Startset Script von Veon relativ einfach ist und viele ein Problem beim bearbeiten des Startsets haben, habe ich mir die Mühe gemacht und es etwas bearbeitet. Hier findet ihr 3 verschiedene Arten von Anfängersets.
1. Startset LvL 30+ (Überarbeitetes Anfängerset)
|
D2NT - Intelligentes Stashen möglich?
04/18/2010 - Diablo 2 Programming - 0 Replies
Hallo Leute,
mir ist aufgefallen, das der Bot, wenn er was findet, einfach bzw. irgendwo das item rein legt und das wars. So meine Frage, ist es möglich ein script zu machen, womit man das alles schön intelligent stasht?? Indem der Bot (wenn erforderlich Items hin und her bewegt, um einfach jedes Kästchen aus zu nutzen.
Gruß
-momo
|
inventar ins tradefenster stashen
02/12/2010 - Diablo 2 - 4 Replies
hi,
ich bin auf der suche nach einem tool mit dem man den inhalt seines inventars ins tradefenster legen kann...(per knopfdruck ö.ä.)
ich bin der meinung schonmal über sowas gestolpert zu sein aber ich finde es nicht mehr wider.
evtl irre ich mich auch und sowas gibt es nicht.
wäre nett wenn jemand bescheid weiß und vll helfen kann
lg
|
[kuk bot] einstellung um gold zu stashen
03/19/2009 - Diablo 2 - 6 Replies
hat jemand ein tipp wie ich kuk bot dazu bringe ab ner bestimmten menge das gold in die kiste zu legen?
|
C# Verbessertes BruteForce Programm
07/28/2008 - .NET Languages - 0 Replies
Dieses Thread stammt nicht von mir ich habe ihn für euch kopiert
Dieses Tutorial basiert auf simples BruteForce-Programm programmieren
Die dort gemachte Funktion ist jedoch für die verbesserte Form nicht zu gebrauchen, weil sie nicht die passende Struktur hat.
Also bennen wir den Funktionsnamen mal eben um, in z.B. "alter_hauptteil".
Man könnte ihn über diesen Namen weiterhin aufrufen.
Jetzt machen wir uns eine neue Funktion.
Code:
|
All times are GMT +1. The time now is 23:17.
|
|