Susi Solobot

11/03/2011 14:52 Salamix#1
Eigentlich macht mir Programmieren mehr Spaß, als Diablo2 zu spielen. Wie gut, daß man botten kann. Ich stelle mal vor, was ich so treibe. Vielleicht kann es ja dem einen oder anderen die Hemmschwelle nehmen, selber an den Scripts rumzufummeln. Das macht nämlich spaß und ist gar nicht so extrem schwer. Außerdem stürzt seit ein paar Tagen d2nt ab, weshalb ich mal d2bs ausprobiert habe. Ich habe den Eindruck, daß die engine des d2bs viel besser ist. Die mitgelieferten Scripts sind halt (noch) nicht so gut. Also keine Hemmungen, es mal auszuprobieren!

31.10.11, 15:30

Da eh Ladder-Reset war, lösche ich meine alten Chars und fange ganz neu an.
Eine Zauberin. Ich nenne sie Susi (Name von der Redaktion geändert).
Ich gehe ohne Bot mal ganz normal in Diablo II rein und lösche die alten Chars und lege Susi an.
Und ich hole mir von Akara den Auftrag, die Höhle des Bösen zu räumen.
So, genug selber gespiel. Bin ja schon total erschöpft. Es muß mehr gebottet werden.

Installation.
Die "OOG with 1.4.rar" nach irgendwo auspacken.
Bei mir ist es "c:\src\OOG with 1.4".
Falls noch nicht auf dem Rechner vorhanden das .net-Framework 3.5 installieren.
Falls noch nicht vorhanden, die vcredist 2010 installieren.
So, das war's auch schon.

Jetzt die ersten Einstellungen machen.
OOG.exe starten. Es erscheint ein Dialog mit einem Profile, das man noch ändern muß.
Also klick auf "Edit".
Den D2Path und den D2BSPath werden Ihr hinkriegen.

Falls Diablo II auch auf Deutsch installiert wurde, muß erst noch eingestellt werden, daß es Englisch ist.
Dazu die "C:\Programme\Diablo II\data\local\use" erstellen, in der nichts drinstehen muß.
Als Flags im OOG-Profile noch -w -direct -txt, damit der Sprachenwandel klappt.

Noch Accountname und Passwort eintragen und Slot 1 nehmen.
Und rechts oben "Update Profile" klicken, ganz wichtig.

Und 18 Games per Hour. Das scheint bei mir zu klappen.

Die "C:\src\OOG with 1.4\scripts-ntbot\libs\config\NTConfig_Sorceress.dbl" nehmen und nach NTConfig_Sorceress_Susi.dbl

kopieren. Und gleich editieren.

Code:
	NTConfig_PublicMode = false;			// Set to false to not party

	NTConfig_Script.push("Den");
Hier stand vorher SimonSays. Also hallo, SimonSays ist ein angenehmes Stück Software. Wenn man man losziehen muß, um was

per Hand zu erledigen, ist der hilfreich. Aber jetzt nicht. Wenn SimonSays läuft, läuft kein späteres Skript. Also erstmal

ausmachen.

Code:
	NT_PickUtility = true;		// tries to fill belt and tombs with pickit

	NTConfig_LifeChicken = 30;	// This is your chicken life percent. If you go below this life total, exit game.

	NTConfig_Columns[0] = [1,1,1,1,1,1,1,1,1,0];
	NTConfig_Columns[1] = [1,1,1,1,0,1,1,1,1,0];
	NTConfig_Columns[2] = [1,1,1,1,1,1,1,1,1,1];
	NTConfig_Columns[3] = [1,1,1,1,1,1,1,1,1,1];

	NTConfig_MinGoldToStash = 100;	// Maximum gold amount carried before going to stash

	NTConfig_BeltColType[0] = "hp";
	NTConfig_BeltColType[1] = "hp";
	NTConfig_BeltColType[2] = "mp";
	NTConfig_BeltColType[3] = "mp";
	NTConfig_BeltColMin[0] = 4;
	NTConfig_BeltColMin[1] = 4;
	NTConfig_BeltColMin[2] = 4;
	NTConfig_BeltColMin[3] = 4;

	NTConfig_NIPFilePath.push("Susi.nip");

//36	Fire Bolt
//47	Fire Ball
	NTConfig_AttackSkill[0] = 0;	// Cast your first spell once. Set to 0 if you won't 
	NTConfig_AttackSkill[1] = 36;	// Cast your primary spell to boss. 
	NTConfig_AttackSkill[2] = 36;	// Cast your primary spell to others. 
	NTConfig_AttackSkill[3] = 0;	// Cast your primary untimed spell if primary spell is timed spell. Set to 0 if 

you won't 
	NTConfig_AttackSkill[4] = 0;	// Cast your secondary spell if monster is immune to your primary spell. Set to 0 

if you won't 
	NTConfig_AttackSkill[5] = 0;	// Cast your secondary untimed spell if secondary spell is timed spell. Set to 0 

if you won't

	NTConfig_ClearPosition = true;	// Set to true if you want to clear area after killing boss.
Und noch die Susi.nip anlegen.
Code:
Quality >= magic : Dexterity = 1000
Das ist ein Trick. magic erkennt er schon wenn es auf dem Boden liegt. Also unmagic Sachen hebt er gar nicht auf.
Aber alles, was magic ist. Aber den Schrott wollen wir gar nicht sammeln, sondern verkaufen. Deswegen sagen wie Dex=1000

und das kann der Bot nicht sehen, solange das Zeug auf dem Boden liegt, sondern erst, wenn es identifiziert wurde. Und

dann, wo es eh schon im Invetar ist, verkauft der Bot es, statt es wegzuwerfen. So machen wir unser Gold.

Mal schauen, ob wir auch ein paar Sachen kriegen, die uns Mana bescheren.
Code:
MaxMana >= 1
;Type = armor : MaxMana >= 1
;Type = sorceressitem : MaxMana >= 1
Wichtig: Alle Tränke anmachen.
Code:
Name = Minor Healing Potion
Name = Light Healing Potion
Name = Healing Potion
Name = Greater Healing Potion
Name = Super Healing Potion

Name = Minor Mana Potion
Name = Light Mana Potion
Name = Mana Potion
Name = Greater Mana Potion
Name = Super Mana Potion
Ob das schon reicht? Wir werden es erleben.

31.10.11, 16:00 Erster Bot-Start
Hmm, er logt sich nicht ein. Böser Bot!

Ok, vergessen, im Profile die Difficulty auf Normal zu stellen. Noch ein Versuch!
Hmm, wieder nichts.

Ok, vergessen, den scripts-path auf "scripts-ntbot" zu stellen. Noch ein Versuch!
Hmm, er versucht sich einzuloggen, kommt aber nicht rein.

Ok, falsches Passwort eingetragen. Noch ein Versuch!
Evtl muß man die OOG.exe auch ausmachen und neu starten, die scheint bei den Versuchen verwirrt zu werden.

Haha, jetzt versucht er ein Spiel mit dem Namen 1 anzulegen. Kann er nicht, gibt es schon.
Vergessen, im Profile Game Name auf Susi zu stellen und ein Game Passwort zu setzen. Noch ein Versuch!

Jetzt geht erstmal ein Dialog auf, der mir alles mögliche einzustellen erlaubt.
Aber da traue ich mich nicht ran. Ich fürchte, der zerschießt mir die hübsch eingestellten Dateien.
Einfach mit Exit schließen.

Oh, was ist das? Da läuft doch SimonSays! Warum das denn? Ich kille den Lauf und schau nochmal in die Steuerdatei.

Oh, ich hatte aus Versehen eine NTConfig_Sorceress_Susi.ntl erstellt. Nu hat irgend ein Script mit eine

NTConfig_Sorceress_Susi.dbl mit Standfardwerten (und SimonSays natürlich) erstellt. Die dbl nenne ich um in dbl.sec zum

später mal Sachen nachschauen. Und aus meiner ntl mache ich eine dbl. Noch ein Versuch!

Jetzt ist mein Key used bei irgend so einem Keyklauer. Na, zum Glück habe ich noch einen.

31.10.11, 18:00
Mit den Keys habe ich nichts zustandegebracht. Alles klappt nicht. Vorhin ist ein Update von OOG reingekommen. AUf einmal

klappt das mit den Keys. Vielleicht. Oder der Keyklauer ist nicht mehr online. Oder eine meiner Umkopierversuche hat was

gebraucht. Na, hauptsache erstmal, es klappt.
Die Zauberin sagt die ganze Zeit "Ich kann nicht". Vielleicht, weil sie dauernd teleporten will?

Zwei neue Zeilen:
Code:
NTConfig_UseTeleportForPickit=false;
me.useTeleport = true;
Nö, sie sagt es weiterhin. Naja, dann soll sie halt mal jammern.

Haha, ich meinte natürlich
me.useTeleport = false;

Trotzdem jammert sie. Und sie kämpft lächerlich schlecht.
lvl2 erreicht sie nach ungefähr 10 Chickens.
Sie bekommt 5 Punkte in Vitalität und als Skill einen Punkt in Wärme.
Oh, jetzt ist sie eine Kampfmaschine!

Das dauernde "Ich kann nicht" nervt.
Ich probiere doch aus, das andere Script als Start zu nehmen. Ich lösche meine *.dbl.
Dann müßte ja wieder der Dialog kommen.
Da stelle ich dann mal ein und speichere ab.
Klappt.
SimonSays raus und Den rein.
Public Mode aus.
Pick Utility an.
Fast Snag an.
Clear Position an.
me.UseTeleport aus.
Bei Skills Primary for Boss und Primary for Others auf Fire Bolt, Rest auf Nothing.
Und Save.
Weiter in der dbl ändern.
Code:
	NTConfig_UseTeleportForPickit = false;	//	True to use teleport when picking items, false to force character
to walk to pick items
Und die Susi.nip zufügen. Die anderen nips raus, sie sammelt nur für sich und hat nicht vor, zu handeln.

Kein Erfolg, sie jammert weiter.

Vielleicht will sie den nichtexistierenden Merc füttern?
Code:
	NTConfig_UseMerc = false; // Set to true if you use a mercenary,
will revive merc at a reviver npc.

Wieder machen, daß sie Geld früher auf die Bank bringt.
Code:
	NTConfig_MinGoldToStash = 1000;	//	Maximum gold amount carried before going to stash
Belt wieder auf hp hp mp mp setzen.

Und sie jammert nicht mehr!!!

31.10.11, 19:00
lv3 erreicht.
5 Punkte in Vitalität und ein Skillpunkt in Fire Bolt.

31.10.11, 19:35
lv4 erreicht.
5 Punkte in Vitalität. Skillpunkte werden aufgespart für später.
Angestrebt wird zunächst der Feuerball. Und dann

Geld allein macht nicht glücklich. Die Dame bracht erstmal, was anzuziehen.
Code:
Type = armor
Und sie hebt ja gar kein Gold auf.
Code:
Type = Gold
31.10.11, 20:37
lv5 erreicht.
5 Punkte in Vitalität. Ach, was soll der Geiz? 2 Skillpunkte in Wärme.

31.10.11, 21:28
lv6 erreicht.
5 Punkte in Stärke. Langsam findet sie Sachen, die sie ob ihrer Schwäche gar nicht anziehen kann.
1 Skillpunkt in Wärme.

31.10.11, 22:45
lv7 erreicht.
5 Punkte in Stärke.
1 Skillpunkt in Wärme.

31.10.11, 23:11
Sie fängt wieder an zu jammern. "Ich kann nicht", "Unmöglich".
Ach, sie hat ein volles Inventar. Nur Schrott. Es war doch wohl keine soo gute Idee, sie alles sammeln zu lassen.
Habe es per Hand verkauft und jetzt 2000 Gold.

Man weiter probieren mit
Code:
Type = sorceressitem : MaxMana >= 1
Type = Orb : MaxMana >= 1
Type = Amulet : MaxMana >= 1
Type = Ring : MaxMana >= 1
Type = Belt : MaxMana >= 1
Type = Gloves : MaxMana >= 1
Type = Helm : MaxMana >= 1
Type = Armor : MaxMana >= 1
nebst üblichem Kram wie Tränken und so.

01.11.11, 00:07
Zum ersten mal die Höhle des Bösen ausgeräumt und damit die Quest erledigt.
Zur Belohnung 1 Skillpunkt in Wärme.

01.11.11, 00:20
lv8 erreicht.
5 in vit, 1 in Wärme.
Per Hand ein Tome of Town Portal gekauft., damit die gesammelten Rollen das Inventar nicht so vollmüllen.

01.11.11, 09:55
lv9 erreicht.
5 in vit, 1 in Wärme.

01.11.11, 12:00
lv10 erreicht.
5 in vit, 1 in Wärme.

Bald fängt sie an, die Höhle des Bösen zu überleben.
Ich stelle schonmal ein, daß sie dann zu Blutrabe sterben geht.
Code:
	NTConfig_Script = ["Den","Mausoleum"];
Habe 5k Gold.
Weg mit
Code:
Type = Gold
01.11.11, 12:00
Ich muß feststellen, die Dame läuft rum wie besoffen. Sie nimmt sich nicht die Monster in der Nähe vor, sondern irgend

welche. Und dann rennt sie ernstmal am Monster vorbei, um es von hinten anzuschießen. Ganz komisch. Also wäre die

Monsterauswahl schlicht zufällig und vor dem Schießen müßte sie erst zur besten Angriffsposition hüpfen. Mit Teleport mag

das ja in Ordnung sein. Aber ohne ist es manchmal doof. So wird sie auf dem Friedhof einfach von Zombies umstellt. Und

anstatt sich freizuschießen, versucht sie zur optimalen Angriffsposition zu laufen und stirbt im Nahkampf, ohne sich zu

wehren.
Mal in den Code schauen.
Was ist dass denn? Bin ich besoffen?
Code:
		MobList.sort(SortMonsters)
Da stehts doch hellblau auf dunkelblau.
Nur gibt es keine Funktion namens SortMonsters.
Stattdessen wird in den Folgezeilen dauernd
Code:
            SortPoint = new Point(_orgx,_orgy)
			MobList.sort(SortMonsters)
            SortPoint=false;
gemacht.
Ach nöö.
Code:
		MobList.sort(SortDistance);
wäre doch hübscher.

01.11.11, 15:30
lv11 erreicht. Wieder Vitalität und Wärme.

01.11.11, 21:09
lv12 erreicht.
Stärke und Feuerball.
Code:
	NTConfig_AttackSkill[1] = 47   // Cast your primary spell to boss. 
	NTConfig_AttackSkill[2] = 47   // Cast your primary spell to others.
Damit ist Blutrabe im ersten Versuch gefallen.
Code:
	NTConfig_UseMerc = true; // Set to true if you use a mercenary,
will revive merc at a reviver npc.
Ich hole mir eine Bogenschützin mit Eiszauber. Feuer habe ich selber genug.

Und ich fürchte, das Tor vor Tristram muß ich per Hand öffnen.
Ein Einsatz für SimonSays.
Ja, SimonSays hebt automatisch tränke auf und trinkt sie bei Bedarf. Und Schätze auch.
Beim Betreten des Stony Field erscheint rechts unten:
Next: Undergrond Passage Lv1.
Dann drückt man die "-"-Taste auf dem Ziffernblock und der Bot geht hin.
Den POI erreicht man mit "*".
Und wenn mein Inventar voll wird, geht der Bot automatisch verkaufen und kommt wieder.
War angenehm.
Das Tor nach Tristram steht.

Also Tristram-Script anmachen. Und bis die Dame teleportieren kann, Tristruns durchführen.
Tristam ging auf Anhieb.
Zwischendurch, als die Monster schon weg waren, die Pause-Teste gedrückt und Deckard Cain heimgeschickt und Quest

abgeschlossen.

01.11.11, 22:12
lv13 erreicht. Wieder Vitalität und Feuerball.

Ich stelle die Tränke auf hp mp mp mp um, weil sie jetzt mehr Mana braucht, aber die Gesundheit kein Problem darstellt.

01.11.11, 22:35
lv14 erreicht. Wieder Vitalität und Feuerball.

Es nervt, daß der Bot das D2-Fenster immer minimiert.
Ich will ja zuschauen.
Aus
Code:
	sendCopyData(null, "OOG", 0,"ShowWindow 6" ); //OOG compatablity,
in der starter.dbj wird
[/CODE]
sendCopyData(null, "OOG", 0,"ShowWindow 1" ); //OOG compatablity,
[/CODE]

01.11.11, 23:05
lv15 erreicht. Wieder Vitalität und Feuerball.

02.11.11, 00:00
lv15 erreicht. Wieder Vitalität und Feuerball.

02.11.11, 01:30
lv17 erreicht. Wieder Vitalität und Feuerball.
Eih, das war doof. In lv18 will ich doch Teleprot lernen und nun habe ich die Vorbedingung vergessen.

02.11.11, 03:14
lvl18 erreicht. Stärke und Telekinese.

02.11.11, 18:00
lvl19 erreicht. Vitalität und Teleprt.
Und
Code:
	me.useTeleport = true;					//	Set boobs to true to allow character to use 

teleport when moving, set to false to disable teleport when moving;
Mal schauen, wie das schon so geht...
Wie befürchtet. Sie hat unglaublichen Mana-Mangel.

In der NTMove.js nach
Code:
	if(NTC_InTown() || NTC_CheckSkill(54) < 1 || !me.useTeleport)
		_walk = true;
	else
		_walk = false;
eingefügt
[/CODE]
if(me.mp<me.mpmax)
_walk=true;
[/CODE]
Das bewirkt, daß mit Lichtgeschwindigkeit bis Tristram spring. Aber dann in Tristram zu Fuß aufräumt. Das ist schon ein

ziemlich guter Kompromiß.

Aber nicht perfekt. Susi überlegt immer vor einem längeren Weg, ob sie den ganzen Weg zu Fuß gehen soll oder ob sie

springen will. Wenn der Steinkreis mal sehr weit weg ist, und Mana ausgeht, ist sie zu dumm, zu Fuß weiterzulaufen. Und

wenn sie man gegen eine Mauer spaziert und nicht weiterkommt, ist sie zu dumm, selbst bei vollem Mana zu springen.
Das muß man doch verbessern können.
Also die komplette NTM_MoveTo kapieren und damit rechnen, sie neu aufbauen zu müssen.
Erstmal kopiere ich sie in eine NTM_MoveToSec.
Das Problem ist, daß schon getPath wissen muß, ob teleportiert wird. Und dann muß der Pfad aubgelaufen oder abgesprungen

werden.
Erster Versuch ist gescheitert. Habe eine lange Funktion geschrieben und sie hat "irgendwo" einen Fehler. Der wird zwar

kurz angezeigt, aber so schnell kann ich nicht lesen.
Mal defensiver programmieren.
Code:
function wantWalk(){
	if(me.mp<me.mpmax)
		return true;
	if(NTC_InTown())
		return true;
	if(NTC_CheckSkill(54) < 1)
		return true;
	if(me.useTeleport)
		return false;
}
nebst
Code:
	var _walk=wantWalk();
und
Code:
	if(NTC_InTown() || NTC_CheckSkill(54) < 1 || !me.useTeleport)
		_walk = true;
	else
		_walk = false;
weg. Uns sonst nichts.
Ja, geht.

Damit Susi häufiger springt, und damit ich auch in Tristram sehen kann, ob sie nachdenkt,
Code:
function wantWalk(){
	if(me.mp<me.mpmax*0.5)
		return true;
	if(NTC_InTown())
		return true;
	if(NTC_CheckSkill(54) < 1)
		return true;
	if(me.useTeleport)
		return false;
	return true;
}
Ok, sie springt fein zu nächsten Feinden, falls Mana halbvoll ist.

Code:
function NTM_MoveTo(x, y, retry, clearpath)
{
	debugPrint("ntm moveto x:"+x+" y:"+y );
	var tempAction = currentAction; 
	var _walk;
	var _path;
	var _result;
	var _retry = 0;

	if(!NTC_WaitCastDone())
		return false;

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

	if(arguments.length < 3)//TODO
		retry = 3;

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

	_path = undefined;

	while(Math.abs(me.x-x) > 4 || Math.abs(me.y-y) > 4){//Aus NTM_TeleportTo  geklaut
		_walk=wantWalk();
		if (_walk)
			_path = getPath(me.area, me.x, me.y, x, y,false);
		else
			_path = getPath(me.area, me.x, me.y, x, y,true,40);
		if(!_path && !_walk)  //tele path failed trying walking path
			_path = getPath(me.area, me.x, me.y, x, y,false,40);	
		if(!_path)
		{
			print("getpath("+me.area+","+me.x+","+me.y+","+x+","+y+","+!_walk+") failed");
			return false;
		}
		if (tempAction != currentAction) {
			print("breaking Out of Moveto");
			return false;
		}
		if(_walk)
			_result = NTM_WalkTo(_path[0].x, _path[0].y);
		else
			_result = NTM_TeleportTo(_path[0].x, _path[0].y);

	}

	return true;
}
Ja, das fühlt sich schn besser an. Susi spingt, wenn sie genug Mana hat.
Leider kommt es auch öfter noch dazu, daß sie nicht läuft, wo sie laufen sollte.
Stattdessen wartet sie, bis die voll genug ist.
Das ist natürlich fatal, wenn sie gerade angegriffen wird.

Aber so klappts.
Das mit dem i mußte sein, weil getPath auch gerne mal eine Liste zurückgibt, die mit der Startposition anfängt. In diesem

Falle trat Susi endlos auf der Stelle.
Code:
function NTM_MoveTo(x, y, retry, clearpath)
{
	debugPrint("ntm moveto x:"+x+" y:"+y );
	var tempAction = currentAction; 
	var _walk;
	var _path;
	var _result;
	var _retry = 0;

	if(!NTC_WaitCastDone())
		return false;

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

	if(arguments.length < 3)//TODO
		retry = 3;

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

	_path = undefined;

	while(Math.abs(me.x-x) > 4 || Math.abs(me.y-y) > 4){//Aus NTM_TeleportTo  geklaut
		_walk=wantWalk();
		if (_walk)
			_path = getPath(me.area, me.x, me.y, x, y,false);
		else
			_path = getPath(me.area, me.x, me.y, x, y,true,40);
		if(!_path && !_walk)  //tele path failed trying walking path
			_path = getPath(me.area, me.x, me.y, x, y,false,40);	
		if(!_path)
		{
			print("getpath("+me.area+","+me.x+","+me.y+","+x+","+y+","+!_walk+") failed");
			return false;
		}
                var i=0;
		while(i<_path.length-1 && Math.abs(me.x-_path[i].x) <= 4 && Math.abs(me.y-_path[i].y) <= 4)
			i++;
		if(i==_path.length-1)
			return true;
		if (tempAction != currentAction) {
			print("breaking Out of Moveto");
			return false;
		}
		if(_walk)
			_result = NTM_WalkTo(_path[i].x, _path[i].y);
		else
			_result = NTM_TeleportTo(_path[i].x, _path[i].y);

	}

	return true;
}
Und jetzt kann auch die wantWalk wieder netschärft werden.
Code:
	if(me.mp<me.mpmax*0.9)
PERFEKT! Sie läuft sehr harmonsich dich Tristram. Wie ich es per Hand tun würde. Nur würde ich nicht so viel Kram

aufheben.

03.11.11, 10:00
Es wird Zeit, weiterzumachen. Aber dazu ist der Bot einfach zu dumm.
SimonSays hilft.
Erstmal das Verzeichnis scripts-ntbot/output erstellen.
Und neue Tasten entdeckt.
Die ^-Taste (links neben der 1) cleart automatisch das Gebiet.
Und die e-Taste schickt sie in die Stadt.
Kleine Verbesserung für mich:
Code:
	if (key == SimonEscToTown) { // escape to town
		StopObjective();
		currentAction ="Escaping to town";
		NTTM_CheckAct();
		NTTMGR_TownManager();
		NTTM_TownMove("portalspot");
		currentAction ="";
	}
Jetzt ist es nicht mehr bloß eine Flucht-Taste, sondern es wird eingekauft.

03.11.11, 12:30
Susi hat echt keine Ahnung, was Türen sind. Und mit ihren bescheinen Teleport-Fähigkeiten, konnte sie kaum was alleine

machen. Trotzdem war es gut, daß sie allene Sachen aufhebt und sich auskennt.
Also die Tasten / und * und - für voriges Level, Pont of Interest und nächstes Level.
Und sagt man "get wps" geht sie zum nächsten Wegpunkt.
Naja, wegen der vielen Türen klappte das nicht. Aber POI war sehr fein, damit sie sagt, in welcher der vier Richtungen der

Zaubberer ist.

lv22 erreicht. Ich halte die Stärke mal auf 30 und mache den Rest in Vitalität.
Und Feuerball halte ich auf halb so viel wie Wärme.

So, bin im Canyon of the Magii. Ah, keine Türen! Hier darf sie bis morgen rumbotten.
Dazu nehme ich mir das Duriel-Script und schlachte es aus. Das geht ruck zuck und ist voll easy.
Code:
function NT_Canyon() 
{
	var _tileid;

	print("ÿc3Starting Canyon Script");
	
	if (me.area != 46) 
	{
		if (!NTTM_CheckAct()) 
			throw new Error();
			
		NTTMGR_TownManager();

		print("ÿc8Going to Canyon of the Magi");
		
		if (!NTTM_TownMove("waypoint")) 
			throw new Error();
			
		if (!NTM_UsePortal("Waypoint", 46)) 
		{
			print("ÿc8Seems we do not have the waypoint, Lets go get it! Traveling to Canyon of the Magi");
			NTM_TravelTO(46);
			
			print("ÿc8Interacting with Waypoint as we don't have it.");
			NTM_GotoWaypoint(46, true, 10000);
		}
	}
	
	print("ÿc5Precasting");
	NTP_DoPrecast();
	
	if(!NTA_ClearRooms())
		throw new Error();

	return true;
}
Allein, es klappt nicht. Das Script will und will nicht laufen.

03.11.11, 14:00
Haha, Schreibfehler! Aber nicht im Code.
Der Dateiname war NTCanyion.dbl statt passend zum Funktionsnamen NTCanion.dbl
So, dann man wieder botten. :)

Und der Merc darf sich einen Blitz-Bogen wünschen.
Code:
Quality > magic : Dexterity = 1000

;Type = Gold

Type = Bow : Sockets >= 2


Type = Orb : MaxMana >= 10
Type = Shield : MaxMana > 10
Type = Amulet : MaxMana >= 10
Type = Ring : MaxMana >= 10
Type = Belt : MaxMana >= 10
Type = Gloves : MaxMana >= 1
Type = Helm : MaxMana >= 10
Type = Armor : MaxMana >= 10
Type = Boots : MaxMana >= 1


Name = Minor Healing Potion
Name = Light Healing Potion
Name = Healing Potion
Name = Greater Healing Potion
Name = Super Healing Potion

Name = Minor Mana Potion
Name = Light Mana Potion
Name = Mana Potion
Name = Greater Mana Potion
Name = Super Mana Potion

Name = Chipped Topaz
Name = Flawed Topaz
Name = Topaz
Name = Flawless Topaz
Name = Perfect Topaz

Name = Tal rune
Name = Ral rune
Name = Ort rune
11/03/2011 16:21 seifenoper#2
Quote:
Originally Posted by Salamix View Post
...
Ich gehe ohne Bot mal ganz normal in Diablo II rein und lösche die alten Chars und lege Susi an.
Und ich hole mir von Akara den Auftrag, die Höhle des Bösen zu räumen.
So, genug selber gespiel. Bin ja schon total erschöpft. Es muß mehr gebottet werden.
[/code]
Genau so gings mir auch beim Start :awesome:

Made my Day :handsdown:
11/03/2011 16:24 GodzZz#3
Klasse Beitrag, hat echt Spaß gemacht das zu lesen ;)

Halte uns aufm Laufenden.
11/03/2011 16:43 2Paddy#4
Quote:
Originally Posted by GodzZz View Post
Klasse Beitrag, hat echt Spaß gemacht das zu lesen ;)

Halte uns aufm Laufenden.
word

gibt auch mut nicht aufzuhören ^^
11/03/2011 16:52 TheCrazy11#5
Klingt spannend, bei mir war es nicht ganz so extrem, habe bis lvl 24 meinen Pala mit seinen Begleiterinnen selbst gespielt! ;)
11/03/2011 21:58 kal_el#6
du bist ja putzig :) weiter so
11/03/2011 22:11 kurzUm#7
Quote:
Originally Posted by kal_el View Post
du bist ja putzig :) weiter so
;)

Ick hatte och mein Spass beim lesen !
11/04/2011 00:11 lanara#8
Schön geschrieben, vielleicht wäre ja auch die Blogfunktion hier im Forum etwas für dich. ;)
11/04/2011 12:28 darkspinne#9
Haha ein sehr interessanter und cooler Beitrag. Ich will mehr über Susi erfahren :). Schreib bitte weiter dran rum ;). Solltest dir auch überlegen wie Lanara schon sagte ein Blog anzulegen und wenn Susi fertig ist, über einen weiteren Char zu schreiben. :)

Aufjedenfall klasse! Weiter so :)
11/05/2011 19:44 Salamix#10
Vielen Dank für den zahlreichen Zuspruch!
Susi geht es sehr gut. Mir nicht so, weil das Programmieren so langwierig ist.
Der nächste Bericht wird schön, weil sie dabei erheblich schlauer wird. :D
11/05/2011 21:32 reset113#11
Einfach nur freaky...
11/07/2011 16:29 Salamix#12
03.11.11, 15:32
lv23 erreicht.

03.11.11, 16:49
lv24 erreicht.
Vitalität lasse ich erstmal auf 100 und strebe Stärke 45 an.
Wenn ich mich recht erinnere, war 45 für schwere Gürtel nötig.

03.11.11, 18:52
Ach, ich sollte Duriel mal machen. Aber oh, weh! Der ist ja viel zu stark!
Es würde gehen, wenn ich ihn immer ein wenig hauen würde und mit der "e"-Taste in die Stadt springen würde, und das ein

paar mal. Also das, was man als Townchicken kennt. Zu diesem Zwecke stelle ich auch einen Akt2-Merc ein, der hält einfach

mehr aus. Jo, und nach getaner Arbeit darf er wieder gehen. In Akt3 möchte ich wieder meine Bogenschützin.

Duriel war leicht.

Die Wegpunkte von Akt3 bis Unterkurast muß ich auch per Hand suchen, weil die Gegend zu Fuß nicht gebottet werden kann.

Ab Unterkurast bis Travincal geht mit SimonSays einfach: "get wps" eingeben.

Kurast wäre der nächste Ort für Susi. Da kann sie in den vielen Kisten ein paar Mana-Sachen finden.
Aber das Kurast-Script räumt nur fix die Kisten aus.
Code:
function NT_Kurast()
{
	print("ÿc3Starting Kurast script");

	if(!NTTM_CheckAct())
		throw new Error();

	NTTMGR_TownManager();

	NTM_TravelTO(79);

	NTP_DoPrecast();
	NTC_OpenAreaChests();

	NTM_TravelTO(80);
	NTC_OpenAreaChests();

	return true;
}
Sie sollte auch ein wenig Kämpfen üben.
Code:
function NT_Kurast()
{
	print("ÿc3Starting Kurast script");

	if(!NTTM_CheckAct())
		throw new Error();

	NTTMGR_TownManager();

	NTP_DoPrecast();
	NTM_TravelTO(79);
	if(!NTA_ClearRooms())
		throw new Error();
	NTC_OpenAreaChests();

	NTP_DoPrecast();
	NTM_TravelTO(80);
	if(!NTA_ClearRooms())
		throw new Error();
	NTC_OpenAreaChests();

	return true;
}
Das werde ich in Zukunft immer mal machen, ein NTA_ClearRooms() rein und Susi fühlt sich wohler.

Allerdings werden in Akt3 keine Rüstungen repariert. Also schiebe ich jeweils einen kleinen Canyon davor.
Code:
	NTConfig_Script = ["Canyon","Kurast"];
Im Canyon geht ihr das Mana aus. Also wieder drei Slots Mana.
Und noch ein wenig mehr wäre nötig. Ich mache mal einen Einkaufsbummel...
Aha, Vierer-Gürtel kann ich erst mit Stärke 60 tragen. Dann gebe ich mal wieder was für Stärke aus.
Und ich kaufe mir eine Rüstung, die 10% Nova lv3 zaubert, wenn ich getroffen werde. Vielleicht reicht das Bißchen, um mit

9 Manatränken durch den Canyon zu kommen. Ja, es reicht. So knapp war das also.

Oder schafft sie schon Travincal? Mal schauen.

Nein, bei weitem nicht!!!

Aber unmöglich ist es auch nicht. Townchicken muß her.
Und siehe da, es ist schon vorbereitet. In Tristram springt sie nämlich oft auch mal in die Stadt, nämlich immer, wenn

der Merc weg ist. Ich suche in den Scripts nach "merc" und von da aus finde ich die "function NTTMGR_CheckSafe(level)"

und da wundere ich mich wieder. Der Parameter level wird NIE verwendet. Immer nur eine 1 steht drin. Weg damit.

Code:
function NTTMGR_CheckSafe(level)
{
	var wantGoToTown = NTT_CheckMerc() || me.hp<0.5*me.hpmax || NTT_CheckBelt();

	if(wantGoToTown)
	{
		var _prearea = me.area;
	...
So, jetzt gibt es Town-Chicken, sobald die Lebenspunkte auf 50% gefallen sind.

03.11.11, 24:00
Über die ganzen Versuche ist Susi auf lv27 aufgestiegen.
Des nachts darf sie Travincal machen.
Code:
	NTConfig_Script = ["Travincal"];
04.11.11, 11:00
Susi ist verarmt! Durch die vielen Merc-Wiederbelebungen ist ihr das Geld ausgegangen. Jetzt geht sie nach Travincal,

läßt sich erschlagen und macht das dann nochmal, immer wieder. Waffen und Rüstung sind demoliert. Sie ist pleite und hat

keinen Freund mehr.

Ich schicke sie in den Canyon, ein wenig Gold machen.
Code:
	NTConfig_Script = ["Canyon"];
Keine Chance! Sie versucht nach jedem Schlag erstmal in die Stadt zu gehen, um den fehlenden Merc wiederzubeleben.
Code:
NTConfig_UseMerc = false;
Ja, geht. Aber zunächst soll sie noch aggressiver Gold sammeln.
Code:
Quality >= magic : Dexterity = 1000
Type = Gold : gold >= 10
Ja, das geht. Langsam erholt sie sich wieder.

Das war nicht schön anzusehen.

04.11.11, 13:00
lv28 erreicht.
Nach weiteren zwei Stunden der Einsamkeit, gehen sie jetzt wieder zu zweit auf die Jagd.
Code:
	NTConfig_UseMerc = true;
04.11.11, 17:30
Und schnell wird sie wieder gierig. 120k als Puffer sollten eine Weile reichen.
Code:
	NTConfig_Script = ["Tristram","Travincal"];
Keine Chance.

Zurück auf
Code:
	NTConfig_Script = ["Tristram","Kurast","Travincal"];
Und mal wieder einen Merc2-Merc ausprobieren. Vielleicht sorgt der in Travincal für ein längeres Überleben. Für Tristram

und Kurast braucht Susi keinen Merc. Die lästigen Akt3-Besorgungen wollte ich mit einem Bogenschützen machen. Naja, mal

sehen. Dazu kaufe ich dem Akt2-Merc eine zweifach sockelbare Stangenwaffe und stecke zwei Topase rein. Den Blitzbogen

sichere ich in der Schatzkiste.
Ach, das hat alles keinen Zweck. Ich probiere völlig zusammenhanglos mal diese und jeene Programmänderung aus.
Ach, warum ist Susi doch nur eine Zauberuin. Die ist ja soo schwach.

Potzblitz! Ich habe es gefunden! Wie mein altgrieschischer Forscherkollege sagen würde: Heureka!
Code:
	var wantGoToTown = NTT_CheckMerc() || me.hp<0.9*me.hpmax || NTT_CheckBelt();
Jeah! Viel früher townchickenen!
Susi überlebt jedesmal Travincal!

Also dann,
Code:
	NTConfig_Script = ["Travincal"];
ist klar, ne?

Es ist sagenhaft! Exp kommt rein, ich kann zusehen, wie schnell. Und Gold auch.

Und mit
Code:
	if (!NTTM_CheckAct(2))
		throw new Error();
in der Travincal, ist auch das Reparieren kein Problem.

05.11.11, 07:30
Der Bot ist aus. Komisch. Der sollte sich das nicht angewöhnen, sonst wechsle ich zum d2nt. Ich warne ihn.
Susi hat lvl31 erreicht. Ja, Travincal ist schön. Stärke 60 erreicht, Rest in Vitalität.
Wärme 20 erreicht, Rest in Feuerball.
Susi sammelt keine Steine mehr. Es gibt genug Runen.
Immer, wenn sie was hübsches zum Anziehen findet, passe ich das Nip-File an, damit sie nur noch bessere Sachen behält.

Code:
;Gold
Quality >= magic : Dexterity = 1000
Type = Gold : gold >= 100

;Merc
;Type = Bow : Sockets >= 3 : MinDamage > 2
Type = Polearm : Sockets >= 2 : MinDamage > 2
Type = Armor : Defense > 159
Type = Helm : Defense > 73

;Susi
Type = Orb : MaxMana > 14
Type = Shield : MaxMana > 20
Type = Amulet : MaxMana > 7
Type = Ring : MaxMana >= 24
Type = Belt : MaxMana > 0
Type = Gloves : MaxMana > 20
Type = Helm : MaxMana > 10
Type = Armor : MaxMana > 103
Type = Boots : MaxMana > 0

;Name = Minor Healing Potion
;Name = Light Healing Potion
Name = Healing Potion
Name = Greater Healing Potion
Name = Super Healing Potion

;Name = Minor Mana Potion
Name = Light Mana Potion
Name = Mana Potion
Name = Greater Mana Potion
Name = Super Mana Potion

Name = Tal rune
Name = Ral rune
Name = Ort rune
Naja, nie zu sterben, ist nicht gierig genug.
Code:
	var wantGoToTown = NTT_CheckMerc() || me.hp<0.8*me.hpmax || NTT_CheckBelt();
05.11.11, 10:30
Viele viele Runen. Ich muß Cubing anmachen. Und Ort-Runen bauen lassen.
Code:
	NT_EnableCubing = true;
Code:
	NT_RecipieBox.push(["Name = Tal rune","Name = Tal rune","Name = Tal rune"])
	NT_RecipieBox.push(["Name = Ral rune","Name = Ral rune","Name = Ral rune"])
Und wieder ausmachen, was nutzt ein Inventar voller Ort-Runen, wenn der Merc keine sockelbare Waffe hat? Die vielen Runen

verkaufe ich und sammle erst, wenn ich auch eine Waffe mit Sockeln habe.

Der ItemLogger nervt. Der wird kurzerhand abgeschaltet.
Code:
function writeLog(item, me, isEthereal, _mode) { 
	return true;
...
Bald wird es dumm, nur Mana-Sachen zu sammeln. So ein paar Resistenzen wären auch ok. Und Skills. Aber auch Mana. So

zusammen halt. Und dafür ist das Format der Nip-Files VIEL zu schwach. Da muß eine Lösung her. Entweder auf den d2nt

wechseln mit den guten Scripts. Oder selber schreiben.

Dazu schleuse ich in die bisherige Bewertungsfunktion einen Hook ein.
Code:
function njipCheckGoodItem(item_, mode_) {
// 0: Wills nicht haben
//-1: Wills identifizieren oder verkaufen
// 1: Wills haben
	var wh=wantHave(item_);
//	debugLog("wantHave("+item_.name+")="+wh);
	return wh;

	var retval = 0;
...
So, in der wantHave kann ich jetzt alles bauen.

Da ein Energiepunkt zwei MaxManapunkte ergibt, ist es mir egal, ob ein Item Energie oder doppelt so viel Mana liefert.

Und genau das kommt in meine Bewertungsfunktion. Energie ist mir doppelt so Wertvoll wie Mana.
Und da ich jetzt in JavaScript bin, kann ich später alles einbauen, was ich will.

Ja, da entsteht was.

Ich will Euch nicht damit langweilen, wie umständlich meine ersten Versuche waren.

07.11.11, 02:00
lvl37 erreicht.

Ich gehe mit Susi noch die beiden fehlenden Questitems holen.
Dazu muß eingestellt werden, daß sie nichts aufsammelt. Weil das Laufen von SimonSays und das Aufsammeln parallel

geschehen und sich nur stören.

Und jetzt, wo sie so viel Mana hat und einen Plattengürtel mit 16 Plätzen,
Code:
function wantWalk(){
	if(me.mp<me.mpmax*0.5)
		return true;
Mephisto war kinderleicht. Kein Wunder, so lange, wie Susi in Travincal geübt hat, während ich mich mit den

Pickup-Funktionen unterhielt.

Susi springt viel zu oft in die Stadt zurück.
Code:
	NTConfig_BeltColMin[0] = 1;
	NTConfig_BeltColMin[1] = 1;
	NTConfig_BeltColMin[2] = 1;
	NTConfig_BeltColMin[3] = 1;
Izual und der Schmied sind zu leicht. Die NTDiablo.dbl fängt natürlich zwei NTA_ClearRooms().
Und
Code:
	NTConfig_Script = ["Diablo"];
07.11.11, 16:00
lv39 erreicht.

Dann stelle ich mal meine Pickits vor:
Mein Einsprungspunkt ist ja die wantHave.
Die überprüft nicht ein langes Array von Clauses, sondern ruft nur weitere FUnktionen auf, die ich geeignet ablegen muß.
Sie prüft anhand des itemType, welche Funktiuonen in Frage kommen.
Pro itemType habe ich ein Array dazu.
Und Diese Arrays voller Funktionen stecke ich in ein großes Objekt namens theEvaluator.
Code:
function wantHave(item){
// 0: Wills nicht haben
//-1: Wills identifizieren oder verkaufen
// 1: Wills haben
	debugLog("See "+item.name);
	if(!item.getFlag(ITEM_FLAG_UNIDENTIFIED))
		return -1;
	var rules=theEvaluator[item.itemType];
	if(rules==undefined)
		return 0;
	var stats=item.getStat(-2);
	for(var i=0;i!=rules.length;i++)
		if(rules[i](item,stats))
			return 1;
	return 0;
}
Die erste Entscheidungsarbeit macht also der Index-Zugriff von Javascript.

Und dann muß ich noch die Regeln zufügen.
Dazu baue ich erst auch eine kleine Funktion, die gegebenenfalls automatisch das passende Array anlegt, falls es noch

nicht da war.
Code:
var theEvaluator=new Object;
function addRule(itemTypeName,func){
	var itemType=njipType[itemTypeName];
	if(theEvaluator[itemType]==undefined)
		theEvaluator[itemType]=new Array();
	theEvaluator[itemType].push(func);
}
Und dann die Regeln.
Aber ähm, die Bewertungsregeln für alle Susi-Sachen sind gleich! Also das mit dem "Energie zählt doppelt.", und was noch

alles kommen wird.
Code:
function getElementOrZero(array,key){
	if(array[key]!=undefined)
		return array[key];
	return 0;
}

function calcGenericValue(item,stats){
	const Energy=1;
	const MaxMana=9;
	var value=0;
	value+=getElementOrZero(stats,MaxMana)*10;
	value+=getElementOrZero(stats,Energy)*20;
	debugLog("Value: "+value+" Name: "+item.name);
	return value;
}
Und jetzt die Regeln:
Code:
debugLog("addRules");
addRule("shield",   function(item,stats){return calcGenericValue(item,stats)>180;});
addRule("armor",    function(item,stats){return calcGenericValue(item,stats)>40;});
addRule("ring",     function(item,stats){return calcGenericValue(item,stats)>250;});
addRule("amulet",   function(item,stats){return calcGenericValue(item,stats)>350;});
addRule("boots",    function(item,stats){return calcGenericValue(item,stats)>0;});
addRule("gloves",   function(item,stats){return calcGenericValue(item,stats)>0;});
addRule("belt",     function(item,stats){return calcGenericValue(item,stats)>150;});
addRule("helm",     function(item,stats){return calcGenericValue(item,stats)>200;});
addRule("orb",      function(item,stats){return calcGenericValue(item,stats)>130;});

addRule("gold",   function(item,stats){return getElementOrZero(stats,njipStats["gold"])>=500;});
Sieht doch hübsch aus. Und ist schnell.

Susi kümmert sich jetzt mal ganz intensiv ein Weilchen um Dioablo. Wir wollen doch, daß Akt5 (bis auf den Endgegner)

genauso leicht wird.
11/07/2011 16:41 Diablofarmer#13
wiedermal toll zu lesen, nie wieder Zeitung aufm Pot :)
11/16/2011 18:05 Salamix#14
07.11.11, 22:54
Mal Diablo anschauen. Das mit den Siegeln ist lästig. Ich werden den Teufel tun und sie selber lösen. Das kann Susi auch

alleine. Aber Diablo umhauen kann sie mal gar nicht.
Was tun?
Na, rumscripten natürlich!
Einfach ein
Code:
	NTTM_CheckAct();
	return true;
	print("ÿc1Waiting for Diablo to spawn..");
und den Rest an SimonSays übergeben.
Code:
	NTConfig_Script = ["Diablo","SimonSays"];
Ein paar mal passend "e" gedrückt und er ist umgefallen. Zugegebenermaßen bin ich auch ein paar mal umgefallen. :)

In Akt5 wieder einfach "get wps".

Was für eine Scheiße. SimonSays ist doof. Bis ich erstmal kapiert habe, daß "e" nicht mehr geht, weil keine

Stadtrollensprüche nicht mehr da sind...
Mal ihm an den Anfang das stellen, was alle rechtschaffenenen Scripts am Anfang haben.
Code:
function NT_SimonSays() {
	if (!NTTM_CheckAct())
		throw new Error();
	NTTMGR_TownManager();
	...
"get wps" hängt an den Urahnen. Mal schauen...

Ok, die Urahnen fallen auf Anhieb.

Dann kann Susi ja theoretisch Baalruns machen.
Uihuihuih!
Code:
	NTConfig_Script = ["Baal"];
Das Baal-Script geht nicht. Susi ist zu schwach. Sie ist nach vielen Townchickens und überhaupt irgendwo, nur nicht mehr

in der Nähe von Baal. Und Baal ist nicht der Meinung, dann noch Minions schicken zu sollen.

Also erstmal Vorübungen machen.
Code:
	NTConfig_Script = ["Eldritch","Frozenstein","Nihlathak","Pindleskin","AncientsWay","ThreshSocket","Worldstone"];
Ach, nöö. Susi läuft meilenweit und tut wenig.

Also nehmen wir einen Kompromiß.
Code:
	NTConfig_Script = ["Worldstone","Baal"];
Aber ich trage keine Verantwortung! Wenn Susi morgen früh wieder nackt da steht und bettelt, dann ist das nicht meine

schuld. Ich sage: "Nee, das wird finanziell zu knapp.". Aber sie will es einfach riskieren.

Zur Sicherheit kriegt der Merc auf seinen Wunschzettel nach einer Stangenwaffe mit vier Sockeln
Code:
addRule("polearm",   function(item,stats){
	return getElementOrZero(stats,njipStats["itemnumsockets"])>=4;
});
08.11.11, 10:40
lv45 erreicht.
Susi hatte den richtigen Riecher.

Aber außer einem Amulett mit 20 Energie, welches das alte mit 35 Mana ersetzen wird, hat sie nichts gefunden.
Und sie irrt durch einen leeren Weltensteinturm. OOG zeigt eine Game Length von 7700 Sekunden an, was mehr als zwei

Stunden sind. Ja, ich hatte die Maximalspiellänge rausgemacht, um Diablo zu killen. Und vergessen, sie wieder

reinzumachen.
Ich setze sie auf 600 Sekunden.
Außerdem möchte Susi wieder zwei Slots für Heiltränke benutzen.
Susi hatte nicht den richtigen Riecher. Sie hat nur fast die ganze Nacht gebummelt. Das Geld ist alle.

Zur Zeit ist es finanziell nicht drin, sich mit Baal anzulegen.
Code:
	NTConfig_KillBaal = false;
Und Tränke aufheben
Code:
addRule("manapotion",function(item,stats){return true;});
addRule("healingpotion",function(item,stats){return true;});
Und für ein stabiles Nebeneinkommen sorgen.
Code:
	NTConfig_Script = ["Travincal","Baal"];
Und mit dem Spielen ein wenig zurückhaltender sein. Nur für alle Fälle.
Code:
	NTConfig_GambleStopGold = 1000000;			//	Gold amount at which to stop gambling
08.11.11, 17:28
lv48 erreicht.
Frozen Orb erlernt. Nicht, daß es vom Schaden her nötig wäre. Aber damit kann Susi nebenher die Gegner ein wenig

verlangsamen.

Code:
	NTConfig_AttackSkill[0] = -1   // Cast your first spell once. Set to 0 if you won't 
	NTConfig_AttackSkill[1] = 64   // Cast your primary spell to boss. 
	NTConfig_AttackSkill[2] = 64   // Cast your primary spell to others. 
	NTConfig_AttackSkill[3] = 47   // Cast your primary untimed spell if primary spell is timed spell. Set to -1 if 

you won't
	NTConfig_AttackSkill[4] = -1   // Cast your secondary spell if monster is immune to your primary spell. Set to 0 

if you won't 
	NTConfig_AttackSkill[5] = -1   // Cast your secondary untimed spell if secondary spell is timed spell. Set to 0 

if you won't
Und
Code:
	NTConfig_KillBaal = true;
Und es muß mehr getrunken werden. Damit Susi größere Chancen hat zu überleben, wenn die Schubser der letzten Welle sie

vom Townchicken abhalten.
Code:
	NTConfig_LifeThresh = 90;
Redvex angemacht für maximale Zauberrate. Das war gut. Die Wege sind jetzt viel schneller.

Und nachdem Baal gefallen ist, darf Susi auch ein wenig mit den Kühen spielen.
Code:
	NTConfig_Script = ["Cow","Baal"];
Susi kommt meistens nicht an Wirts Bein, denn die NTC_OpenChest klappt oft nicht. Vielleicht ist das auch der Fehler,

weshalb die Siegel manchmal nicht aufgehen.
Code:
	for(var i = 0 ; i < 300 ; i++)//statt vorher 200
Jetzt geht es. Aber das Kuhlevel ist mit so wenig Mana nicht sinnvoll. Der Merc braucht eine Stangenwaffe mit vier

Sockeln. Das erzwinge ich jetzt, indem ich Akt5 komplett mache. Irgendwo wird schon eine rumliegen.

Code:
	NTConfig_Script = 

["Eldritch","Frozenstein","Nihlathak","Pindleskin","AncientsWay","ThreshSocket","Worldstone","Baal"];
Hat keinen Sinn. Im Internet lese ich, daß sie erst ab Albtraum Akt1 zu finden sind.
Dann mal ab in den Albtraum.

Code:
	NTConfig_Script = ["Den"];
Noch ein NTA_ClearRooms() rein, um davor die vielen kleinen Roten zu befragen, on sie mir nicht bei der Suche helfen

wollen.

Die sind nicht sehr kooperativ. Tristram wird besser sein. Mal kurz mit SimonSays questen und dann
Code:
	NTConfig_Script = ["Tristram"];
09.11.11, 08:30
Die Stangenwaffe ist da.
Für die passenden Runen geht es zurück zu Baal.
Code:
addRule("rune",     function(item,stats){return item.classID==612;});//Tir Rune
addRule("rune",     function(item,stats){return item.classID==616;});//Tal Rune
addRule("rune",     function(item,stats){return item.classID==617;});//Ral Rune
addRule("rune",     function(item,stats){return item.classID==621;});//Sol Rune
Na, ich glaube, im Canyon kann ich auch Runen suchen. Ein paar Weichbrote weggemacht, aber der Zauberer mit seinem

verrückten Irrgarten ist doof. Den mache ich nicht per Hand.
Code:
	NTConfig_Script = ["Summoner"];
Der war leicht. Passend die Pause-Taste gedrückt und per Hand durchs Tor in den Canyon gegangen.

Jetzt muß die Sol-Rune her. Ich versuche
- viele kleine Rote (Albtraum)
- oft Travincal (Normal)
- Baalruns (auf Normal)
- oft Tristram (Albtraum)
Und alles halt. Es wird langsam unspaßig.

09.11.11, 23:00
Lange ein Sol-Rune gesucht. Jetzt auf einmal habe ich zwei davon. Eingestellt hatte ich "Tristram","Cow" (Normal).
Die Stangenwaffe wird mit "Einsicht" versehen.

Duriel ist viel zu doof zu spielen.
Duriel ist echt eine Frechheit. Viel zu schwer. Erst ein voll langer Weg und dann geht man tot. Ich habe es jetzt schon

fünfzenhmal probiert und bin jedesmal gestorben. Das muß gebottet werden.

Ich nehme das Duriel-Script und füge am Ende zu
Code:
	for(;;)
		NTC_Delay(1000):
damit ich dann noch per Hand durch das Tor in Akt3 gehen kann.

Und ich warte ab. Wenn ich mal hinschaue und Susi sich über einen toten Duriel beugt und Däumchen dreht, führe ich sie

schnell durch das Tor. Und mir ist scheißegal, wie lange das dauert. Zwei Tage, drei Tage, ist mirdochegal. Da muß man

einfach Prioritäten setzen. Sie ist der Bot und ich bin der Mensch.

Immer wieder schön, wie ich deklassiert werde. Susi jkann einfach besser mit Tastatur und Maus umgehen: Sie hat es auf

den ersten Versuch geschafft.

Diesmal geht "get wps" von SimonSays (fast) durch. Durch "Einsicht" habe ich ja genug Mana.

Ach, doch nicht. Durchteleporten kann Susi nicht, sie wird wehrlos gekillt.
Und "^" für ClearLevel geht nicht, weil es zu viele Monster sind und d2bs abstürzt.

Ok, ich hatte die API falsch eingeschätzt. Die getpath liefert bei jedem Aufruf einen anderen Weg und man kann auch nicht

meinen Trick benutzen, immer nur den ersten Schritt zu tun.
Die alte NTMove wieder reinkopiert und alles ist null Prob. In Sekunden hat er alle Wegpunkte.

Und damit geht "Canyon" wieder gut.

Aber ich mache Baal-Runs auf normaler Schwierigkeit. Die bringen mehr Exp, denke ich.

10.11.11, 07:00
(lv60 erreicht, wie ich viel später erfahren werde)
Bin raus. So ein Key-Klauer ist wieder drin.
Ein Update für OOG kam rein. Seitdem stürz der Bot ganz ab.

15.11.11, 18:10
Endlich komme ich wieder rein. Der Keyklauer hat eine Pause gemacht.
Ich spiele erstmal nicht, sondern bleibe einfach nur eingeloggt, damit der Keyklauer evtl meinen Key zurückstellt.
Der Bot geht immer noch nicht.

16.11.11, 12:00
So, genug gewartet.
Ich sauge Muddy's D2NT rev 4.
Alles läuft sofort und Susi macht hübsch mit Baal weiter.

Uih, da hat sich aber viel getan!

Danke, Muddy!

Zwei kleine Sachen stören mich.
Er schreibt als Game Description immer rein, daß er ein Bot ist. Das mag ich eigentlich nicht so. Leicht behoben in der

NTBot.ntj.
Und der D2NT Manager ist always on top. Hoffentlich finde ich die Einstellung noch.

16.11.11, 17:30
lv65 erreicht.
Ach, das gingt ja schnell. Hier bleibt Susi noch ein Weilchen.
11/16/2011 18:20 TheCrazy11#15
Gute Fortsetzung! :D

Wegen dem Always-on-top: Muddy hat im Ordner Muddy's D2NT\sdk\Resources eine DLL abgelegt, bei der der Manager nicht mehr nur on top ist! ;)