[Release] Muddy's D2NT

04/25/2011 11:16 Muddy Waters#1531
Quote:
Originally Posted by 19Miami View Post
hey, hab versucht mithilfe dieses scriptes --> [Only registered and activated users can see links. Click Here To Register...]
baal bzw diaruns zu joinen um bei vollen games die chests abzufarmen, nur leider joint er nur dem game und bleibt dann stehen, woran liegt das denn?
Vermutlich weil du in dem Entry Point die NTBotGame.ntj statt der MWBotGame.ntj ausführst, welche bei mir ganz einfach nicht existiert.

Aber du könntest dir die Sache auch einfacher machen und einfach meinen standard Entry Point verwenden, wobei du einfach wie [Only registered and activated users can see links. Click Here To Register...] beschrieben die Namen deiner Chars angibst. ;)

Quote:
Originally Posted by Eichenlaub View Post
Ich habe meine Char Konfigs nun ein wenig angepasst, um schneller die Runs ändern zu können (mal ein leichter Run, dann wieder Dia+Baal für nightmare runs etc.). Vielleicht könnte man das in zukünftigen Versionen fest einbauen?

Hier mein Ansatz:
Code:
NTConfig_KampfModus = 1;
// 1 = Leichter Run
// 2 = Mittlerer Run
// 3 = Schwerer Run
// 4 = Dia + Baal Run
// 5 = Rush bot
	
	
	if(NTConfig_KampfModus <= 1)
	{
             // Scripte
        }

	if(NTConfig_KampfModus == 2)
	{
             // Scripte
        }

etc.
Das ganze habe ich noch ein wenig garniert mit NTConfig_BotType vom Public Botten for Dummies um noch zwischen 3 Bot Arten zu unterscheiden: Leader, Co Fighter und Leecher.
Hat den Vorteil, dass ich sehr schnell die Laufwege des Bots ändern kann. Vielleicht könnte man das so erweitern, dass er unregelmäßig den Run ändert um z.b. von Kampfmodus 1 zu Kampfmodus 2 zu wechseln? Dafür reicht allerdings meine Programmierkenntnis nicht aus :(

Ansonsten super gemachter Bot ;)
Das würde aber voraussetzen, dass ich irgendwelche Run Konfigurationen vorgebe, was ich eigentlich nicht möchte.
Ich bin der Meinung, das sollte jeder für sich machen.
Zumal das ja nun auch keine wirklich schwierige Änderung ist, meinst du nicht, das könnte man sich bei Bedarf auch selber einfügen?

Achja:
Code:
NTConfig_KampfModus = Random(0, 5);
Initialisiert deine Variable mit einer "Zufallszahl" zwischen 0 und 5. ;)

LG
Muddy
04/25/2011 12:02 19Miami#1532
gibts ne einfache möglichkeit den leechbot in deinen/muddys bot zu integrieren? ansonsten einfach sternie runterladen und den fürsl leechen verwenden?

edit: welche chests sind im Nutzen/Zeit Verhältnis gut und welche weniger gut?

edit2: gibts eigentlich die möglichkeit bestimmte runs zu joinen so wie beim leechbot und dann einfach das chestscript abrufen oder games zu joinen die noch nciht lange offen sind?
04/25/2011 12:59 gery68#1533
Quote:
Originally Posted by 19Miami View Post
gibts ne einfache möglichkeit den leechbot in deinen/muddys bot zu integrieren? ansonsten einfach sternie runterladen und den fürsl leechen verwenden?

edit: welche chests sind im Nutzen/Zeit Verhältnis gut und welche weniger gut?

edit2: gibts eigentlich die möglichkeit bestimmte runs zu joinen so wie beim leechbot und dann einfach das chestscript abrufen oder games zu joinen die noch nciht lange offen sind?
zu edit2 siehe seite 152 da war die Frage heute schon mal.
04/25/2011 15:46 Muddy Waters#1534
Quote:
Originally Posted by 19Miami View Post
gibts ne einfache möglichkeit den leechbot in deinen/muddys bot zu integrieren? ansonsten einfach sternie runterladen und den fürsl leechen verwenden?

edit: welche chests sind im Nutzen/Zeit Verhältnis gut und welche weniger gut?

edit2: gibts eigentlich die möglichkeit bestimmte runs zu joinen so wie beim leechbot und dann einfach das chestscript abrufen oder games zu joinen die noch nciht lange offen sind?
Und was genau ist ein Leechbot? Ein Entry Point? Ein Bot Script?

Edit 1: Keine Ahnung, probier es doch einfach aus. :)

Edit 2: Dazu hatte ich dir eigentlich schon in meiner letzten Antwort einen entsprechenden Link genannt. ;)

LG
Muddy
04/25/2011 16:45 19Miami#1535
als leechbot verstehe ich persönlich ein bot der einem anderen bot den ich in der friendlist habe folgt und mitkämpft bei baal selbständig

edit: bei der alten 1.13 version hatte ich in meinem Log zu jedem tag nen file und das konnte ich mit firefox öffnen, mit der version 1.2 jetzt seit gestern existiert diese datei nicht, da habe ich lediglich mw_itemlog_v2.xsl die datei drinne und gambling usw, wenn ich die aber öffne mit firefox kann man nichts lesen/erkennen
beim alten war folgende datei vorhanden 04-22-11_itemlog.xml
04/25/2011 17:21 Eichenlaub#1536
Quote:
Originally Posted by Muddy_Waters View Post

Achja:
Code:
NTConfig_KampfModus = Random(0, 5);
Initialisiert deine Variable mit einer "Zufallszahl" zwischen 0 und 5. ;)
Sehr schön, danke :)
04/25/2011 17:34 -Nemesis1337-#1537
Ich würd gern mal wissen obs zusätzlich zum Monstercount bei Baalruns auch die Möglichkeit gibt die 3 versch. Monsterarten die im Throne sind anzeigen zu lassen? Damit Fighter die cleanen helfen, wissen wer dort lauert? "Souls, puppets, Knights, Witches.." usw.? Oder ist das "Tp safe, %countmonsters %range to tp near Tp, %countmonsterstotal total in throne" das höhste der Gefühle?
04/25/2011 17:50 Aceridos#1538
Quote:
Originally Posted by 19Miami View Post
als leechbot verstehe ich persönlich ein bot der einem anderen bot den ich in der friendlist habe folgt und mitkämpft bei baal selbständig

edit: bei der alten 1.13 version hatte ich in meinem Log zu jedem tag nen file und das konnte ich mit firefox öffnen, mit der version 1.2 jetzt seit gestern existiert diese datei nicht, da habe ich lediglich mw_itemlog_v2.xsl die datei drinne und gambling usw, wenn ich die aber öffne mit firefox kann man nichts lesen/erkennen
beim alten war folgende datei vorhanden 04-22-11_itemlog.xml
hast du das erstellen von XML logs in der Charconfig(glaube eher es ist in der GlobalSettings Config) aktiviert?
Hast du den Default Ordner kopiert und deinem Char entsprechend benannt? Groß-Kleinschreibung beachtet?

Fällt mir spontan dazu ein... Prüf das bitte mal :)

/edit: Nett wiederholt @ unter mir :o
04/25/2011 18:04 lafaro#1539
Quote:
Originally Posted by 19Miami View Post
edit: bei der alten 1.13 version hatte ich in meinem Log zu jedem tag nen file und das konnte ich mit firefox öffnen, mit der version 1.2 jetzt seit gestern existiert diese datei nicht, da habe ich lediglich mw_itemlog_v2.xsl die datei drinne und gambling usw, wenn ich die aber öffne mit firefox kann man nichts lesen/erkennen
beim alten war folgende datei vorhanden 04-22-11_itemlog.xml

Du musst in dem Ordner
Muddy's D2NT\scripts\Logs\
den "Default" Ordner am besten kopieren und einfügen, die Kopie dann exakt so benennen wie der Char heißt mit dem du bottest. Außerdem muss glaube ich in der Charconfig das loggen aktiviert werden.
04/25/2011 19:35 Muddy Waters#1540
Quote:
Originally Posted by 19Miami View Post
als leechbot verstehe ich persönlich ein bot der einem anderen bot den ich in der friendlist habe folgt und mitkämpft bei baal selbständig

edit: bei der alten 1.13 version hatte ich in meinem Log zu jedem tag nen file und das konnte ich mit firefox öffnen, mit der version 1.2 jetzt seit gestern existiert diese datei nicht, da habe ich lediglich mw_itemlog_v2.xsl die datei drinne und gambling usw, wenn ich die aber öffne mit firefox kann man nichts lesen/erkennen
beim alten war folgende datei vorhanden 04-22-11_itemlog.xml
Also ein Entry Point ist schnell gemacht, dort musst du in der Regel nur eine Zeile anpassen, in den Bot Scripten selber ist es meist mehr - ob das einfach ist oder nicht ist glaube ich eine Frage der perspektive...ich fände es wohl einfach. :)

Zu der XML Sache haben sich meine Vorredner ja schon ausgiebig geäußert.

Quote:
Originally Posted by -Nemesis1337- View Post
Ich würd gern mal wissen obs zusätzlich zum Monstercount bei Baalruns auch die Möglichkeit gibt die 3 versch. Monsterarten die im Throne sind anzeigen zu lassen? Damit Fighter die cleanen helfen, wissen wer dort lauert? "Souls, puppets, Knights, Witches.." usw.? Oder ist das "Tp safe, %countmonsters %range to tp near Tp, %countmonsterstotal total in throne" das höhste der Gefühle?
Also soweit ich es in Erinnerung habe, müsste ich sowas in der Richtung schon implementiert haben.
Allerdings erfolgt die Ausgabe dabei auf die Konsole, es findet keine für jedermann sichtbare Chat Ausgabe statt. Ich meine ich hatte das in einer extra Funktion untergebracht, schau dich einfach mal etwas im Baalscript um. ;)

Machbar ist das auf jeden Fall. :)

LG
Muddy
04/25/2011 21:48 -Nemesis1337-#1541
Nja hab diesen Eintrag ja schon gefunden.
D.h. es muss wohl eine Variable geben um den Monstertyp noch mit angeben zu können:

Quote:
Print("ÿc8" + MW_CountMonstersInThrone(20) + " Monsters nearby, " + MW_CountMonstersInThrone() + " in total.");

if(NTConfig_PublicMode)
{
NTM_MoveTo(me.areaid, 15116, 5068);

var _monsterCount = MW_CountMonstersInThrone(20);

if(_monsterCount)
{
if(_monsterCount < 3)
Say("TP cold, " + _monsterCount + " Monsters close!");
else if(_monsterCount < 6)
Say("TP warm - Help pls, " + _monsterCount + " Monsters close!");
else
Say("TP FUCKING hot, " + _monsterCount + " Monsters close!");
}
else
Say("TP up, no Monsters close!");
04/25/2011 22:10 Muddy Waters#1542
Quote:
Originally Posted by -Nemesis1337- View Post
Nja hab diesen Eintrag ja schon gefunden.
D.h. es muss wohl eine Variable geben um den Monstertyp noch mit angeben zu können:
Bitte Quellcode nicht als [Quote] posten, dabei geht die gesamte Formatierung übern Jordan und man kann nichts mehr lesen. ;)

Die Funktion zählt lediglich die Monster Units im passenden Bereich und gibt dann die Anzahl zurück. Der Rückgabetyp ist also lediglich ein number Objekt, nicht mehr und nicht weniger.

Wenn du zwischen den verschiedenen Units unterscheiden willst, musst du in die Funktion direkt gehen. So wie ich das gerade sehe, habe ich das relativ kompliziert umgesetzt, aber frag mich jetzt nicht wieso.

Die Funktion dazu sieht so aus:
Code:
function MW_CountMonstersInThrone(range, showMonsters)
{
	var _monster, _count, _monsterData, _output;
	var i;
	
	if(arguments.length < 1)	
		range = 100;
	if(arguments.length < 2)	
		showMonsters = false;

	_count = 0;
	_monsterData = new Array();
	
	_monster = NTC_FindUnit(NTC_UNIT_MONSTER);
	
	if(_monster)
	{
		do
		{
			if(NTA_IsValidMonster(_monster) && _monster.IsAttackable() && _monster.y <= 5090 && GetDistance(me, _monster) < range)
			{
				for(i = 0; i < _monsterData.length; i++)
				{
					if(_monsterData[i][0] == _monster.classid)
					{
						if(_monsterData[i][1] == "" && !(_monster.spectype&0x0E))
							_monsterData[i][1] = _monster.name;

						_monsterData[i][2]++;
						
						break;
					}
				}
				if(i >= _monsterData.length)
				{
					_monsterData.push([_monster.classid, "", 1]);
				
					if(!(_monster.spectype&0x0E))
						_monsterData[_monsterData.length - 1][1] = _monster.name;
				}
				
				_count++;
			}
		}
		while(_monster.GetNext());
	}
	
	if(showMonsters)
	{
		Print("ÿc1" + _count + " ÿc8monsters in Throne:");
		for(i = 0; i < _monsterData.length; i++)
		{
			_output = "ÿc8" + _monsterData[i][1];
			
			if(_monsterData[i][1].indexOf("Fury") > -1)
				_output = _output.replace("Fury", "Furies");
			else if(_monsterData[i][1].indexOf("Witch") > -1 || _monsterData[i][1].indexOf("Magus") > -1)
				_output += "es";
			else
				_output += 's';
				
			_output += ": ÿc1" + _monsterData[i][2];

			Print(_output);
		}
	}
	
	return _count;
}
Die Funktion macht prinzipiell nichts anderes, als die Monster abhängig von ihrem Typ in ein Array einzusortieren.
Was man vielleicht verbessern sollte, ist das Beschaffen der Klassen Namen der Monster - denn das wird hier direkt aus den Units abgeleitet, was in dem Moment in die Hose geht, wenn einmal nur Champions von einer Monstersorte verfügbar sind.

Jedenfalls lässt sich das leicht so erweitern, dass die Ausgabe der verschiedenen Monsterklassen nicht nur auf die Konsole erfolgt, sondern eben auch eine Chat Ausgabe ausgeführt wird.

Sowas könnte dann etwa so aussehen:
Code:
function MW_CountMonstersInThrone(range, showMonsters)
{
	var _monster, _count, _monsterData, _output, _chatOutput;
	var i;
	
	if(arguments.length < 1)	
		range = 100;
	if(arguments.length < 2)	
		showMonsters = false;

	_count = 0;
	_monsterData = new Array();
	
	_monster = NTC_FindUnit(NTC_UNIT_MONSTER);
	
	if(_monster)
	{
		do
		{
			if(NTA_IsValidMonster(_monster) && _monster.IsAttackable() && _monster.y <= 5090 && GetDistance(me, _monster) < range)
			{
				for(i = 0; i < _monsterData.length; i++)
				{
					if(_monsterData[i][0] == _monster.classid)
					{
						if(_monsterData[i][1] == "" && !(_monster.spectype&0x0E))
							_monsterData[i][1] = _monster.name;

						_monsterData[i][2]++;
						
						break;
					}
				}
				if(i >= _monsterData.length)
				{
					_monsterData.push([_monster.classid, "", 1]);
				
					if(!(_monster.spectype&0x0E))
						_monsterData[_monsterData.length - 1][1] = _monster.name;
				}
				
				_count++;
			}
		}
		while(_monster.GetNext());
	}
	
	if(showMonsters)
	{
		Print("ÿc1" + _count + " ÿc8monsters in Throne:");
		_chatOutput = "Monster types: ";
		for(i = 0; i < _monsterData.length; i++)
		{
			_output = "ÿc8" + _monsterData[i][1];
			
			if(_chatOutput.indexOf('[') > -1)
				_chatOutput += ", ";
				
			_chatOutput += _monsterData[i][1] + " [" + _monsterData[i][2] + "]";
			
			if(_monsterData[i][1].indexOf("Fury") > -1)
				_output = _output.replace("Fury", "Furies");
			else if(_monsterData[i][1].indexOf("Witch") > -1 || _monsterData[i][1].indexOf("Magus") > -1)
				_output += "es";
			else
				_output += 's';
				
			_output += ": ÿc1" + _monsterData[i][2];

			Print(_output);
		}
		
		Say(_chatOutput);
	}
	
	return _count;
}
Aber wie schon erwähnt würde ich, um das besser zu machen, einfach noch eine kleine Funktion schreiben, die den Klassennamen zu einer classid zurückgibt. Wobei das eher zu den Nuancen zählt, sollte auch so schon das machen, was du willst. ;)

LG
Muddy
04/25/2011 22:44 -Nemesis1337-#1543
Ich werds mir merken :)

Danke funzt echt super gut!! :O
Die Leecher findens auch prima^^

Big thx
04/25/2011 23:15 19Miami#1544
itemlog error, filehandle is null!!

kommt bei mir beim items sellen, was hats damit auf sich?
04/25/2011 23:19 Muddy Waters#1545
Quote:
Originally Posted by 19Miami View Post
itemlog error, filehandle is null!!

kommt bei mir beim items sellen, was hats damit auf sich?
Sehr wahrscheinlich ist der Ausgabeordner nicht vorhanden oder falsch benannt.
Der Ordner muss den Namen deines Chars tragen.

LG
Muddy