[Release] Muddy's D2NT

12/07/2010 22:55 fred9x9#421
Zum leveln kleiner Chars benutze ich gerne MWFlayerJungle.ntj (classicChar).
Ok, klapp wunderbar, aber die Flayer mit dem Kopfschmuck verpuppen sich nach dem Ableben. Diese neuen aufgewärmten Flayer werden nicht erkannt. Ist schon doof, wenn dann irgendwann so einige Biester sich am Char festknabbern und der nix macht :-(
Welcome update !!
12/07/2010 23:22 Muddy Waters#422
Quote:
Originally Posted by Kiffer17 View Post
Hehe, nice dein neues update wird sicher der hammer, bin schon gespannt darauf!^^
Aber bitte nicht zuviel erwarten, da gibt es sicherlich noch einige Baustellen.

Beispielsweise steckt irgendwo in der FindItem() Funktion ein Denkfehler, sodass es - so ist es jedenfalls bei meinem Barb - zu enorm vielen Restarts kommt.
Sowas gilt es noch zu ändern und ich wage zu bezweifeln, dass das schon mit dem nächsten Update der Fall sein wird. :)

Quote:
Originally Posted by fred9x9 View Post
Zum leveln kleiner Chars benutze ich gerne MWFlayerJungle.ntj (classicChar).
Ok, klapp wunderbar, aber die Flayer mit dem Kopfschmuck verpuppen sich nach dem Ableben. Diese neuen aufgewärmten Flayer werden nicht erkannt. Ist schon doof, wenn dann irgendwann so einige Biester sich am Char festknabbern und der nix macht :-(
Welcome update !!
Verpuppen? Aufgewärmt? :confused:
Das Problem klingt lösbar, aber könntest du es nochmal so erklären, dass es auch ein doofer alt-D2ler versteht? :D

Ich werde eh mal überlegen, mehr Ebenen Scripte einzubauen. Wobei ich auch einfach mal im zuge meines JavaScript Guides erklären könnte, was die typischen Funktionen dazu sind, was sie machen und worauf es ankommt. Denn dann könnte sich jeder das machen, was ihm gefällt. :)

Achja, nochmal eine allgemeine Frage an alle:
Ich habe ja eine Angriffsroutine für Summoner Nekros in der kommenden Version implementiert.
Diese ist nun so gestrickt, dass es einen standard Fluch gibt, sowie einen alternativ Fluch für das was bei mir momentan noch "vicious mob" heisst.
Wird ein solcher Mob erkannt, wird zum einen der dafür ausgewählte Fluch verwendet, zum anderen aber auch der Teleport aufs Ziel ausgesetzt.
Soweit so gut...

Mein Problem:
Die Definition, was eigentlich als "vicious mob" zu verstehen ist, ist noch relativ schwammig.

Darum bitte ich diesbezüglich um Vorschläge:
Ab wann würdet ihr einen mob als wirklich gefährlich einstufen? Monstertypen? Auf diese wirkende Auren? Auf den Char selbst wirkende Flüche? Monstermenge?

Natürlich habe ich als langjähriger D2 Spieler selbst ein Bild, ich hätte trotzdem gerne Meinungen dazu, vielleicht tauchen so ja noch Faktoren auf, die ich bislang noch nicht bedacht habe. :)

Ich bitte dabei, auf die jeweiligen enchantments der Monster zu verzichten, da sich diese nicht ohne weiteres auslesen lassen und somit ohnehin nicht für die Betrachtung in Frage kommen.

Lg
Muddy
12/08/2010 07:29 Twinstyle#423
Also wirklich gefährlich sind z.b. Monster mit Überzeugungsaura oder auch Fanatismus, die haun meißtens ganz schön rein. Der Hohe Rat bei Mephisto kann mit der Überzeugungsaura ganz schön beißen, genau wie Fürst de Seis mit seinem Fanatismus.

An der Stelle fällt mir wieder was ein: Thema Diabloscript
Kann das eventuel iwie überarbeitet werden? Weil z.b. das diabloscript von bluebird is um einiges schneller, ohne diese lästigen pausen. Grad in public runs sind die Pausen extrem störend weil es schon vorgekommen is das die Hauptgruppe schon beim Siegelöffnen ist und der Bot noch sonst iwo rumeiert und die hälfte verpasst.

mfg

e: Noch ein weiterer kleiner bug den man eventuell beheben könnte:
Meine ice sorc killt braf mephisto, teleportiert sich dann zur truhe und fängt dann an mit static um sich zu haun während der merc die ganzen Gulfürsten platt macht. So weit so gut, wenn es nicht manchmal vorkommen würde das ein Gulfürst sich ein kleines stückchen außerhalb des bildschirms befinden würde und der merc grad in nem anderen eck Kaffeepause macht. So steht sie da nämlich ewig und drei Tag rum, zumindest bis die Zeit ausgelaufen ist.
Oder kann man das sogar selber iwo ein/umstellen?
12/08/2010 14:06 rockhorst#424
Quote:
Originally Posted by Muddy_Waters View Post
Ist so ein bisschen eine Geschmacksfrage. Von der reinen Ausgabe her sind sowohl Script, als auch aktuelle Ebene möglich.

Mir stellt sich eher die Frage, auf welche Art und Weise man feststellt, dass der Merc das zeitliche gesegnet hat.
Mir fallen dazu spontan zwei Varianten ein:
1. Man reagiert, wenn der Char feststellt, dass der Merc gestorben ist und sich auf den Weg in die Stadt macht, um den Merc wiederzubeleben.
Nachteil: das funktioniert nur, wenn der Char dies auch tut.

2. Man überprüft den Status der Mercs - quasi in Echtzeit - innerhalb des tools threads.
Diese Variante ist relativ elegant, weil sehr präzise.

Ist so ein Feature allgemein gewünscht, sprich soll ich das ganze implementieren?

Sofern das nicht der Fall ist, würde ich es bei obigen Hinweisen belassen, zumal das Problem nicht sonderlich anspruchsvoll ist und es sich sollte daher auch durchaus auf eigene Faust lösen ließe. :p

Lg
Muddy
danke für die Antwort.
Momentan gebe ich in der ReviveMerc im Town Script nur aus, dass der Merc wiederbelebt wurde.
Das Problem ist, dass ich nicht weiß wie ich da an das aktuelle Script komme.
Vielleicht noch ein kleiner Hinweis?

Danke und Gruß
12/08/2010 14:42 Muddy Waters#425
Quote:
Originally Posted by Twinstyle View Post
Also wirklich gefährlich sind z.b. Monster mit Überzeugungsaura oder auch Fanatismus, die haun meißtens ganz schön rein. Der Hohe Rat bei Mephisto kann mit der Überzeugungsaura ganz schön beißen, genau wie Fürst de Seis mit seinem Fanatismus.

An der Stelle fällt mir wieder was ein: Thema Diabloscript
Kann das eventuel iwie überarbeitet werden? Weil z.b. das diabloscript von bluebird is um einiges schneller, ohne diese lästigen pausen. Grad in public runs sind die Pausen extrem störend weil es schon vorgekommen is das die Hauptgruppe schon beim Siegelöffnen ist und der Bot noch sonst iwo rumeiert und die hälfte verpasst.

mfg

e: Noch ein weiterer kleiner bug den man eventuell beheben könnte:
Meine ice sorc killt braf mephisto, teleportiert sich dann zur truhe und fängt dann an mit static um sich zu haun während der merc die ganzen Gulfürsten platt macht. So weit so gut, wenn es nicht manchmal vorkommen würde das ein Gulfürst sich ein kleines stückchen außerhalb des bildschirms befinden würde und der merc grad in nem anderen eck Kaffeepause macht. So steht sie da nämlich ewig und drei Tag rum, zumindest bis die Zeit ausgelaufen ist.
Oder kann man das sogar selber iwo ein/umstellen?
Prinzipiell müsste sich letzteres durch eine korrekte Einstellung der Reaktion auf Immune ändern lassen.
Schau dir den entsprechenden Teil in der Config an, an sich sollte das soweit kommentiert sein, dass man alles versteht.

Das mit dem Diascript ist sone Sache...
Mir ist es ziemlich egal, da ich ohnehin keine public runs mache.
Gleichzeitig müsste man das aber komplett neu aufsetzen, wenn es wirklich ordentlich sein soll. Und letzteres bedeutet Arbeit und reizt mich eigentlich nicht besonders. :(
Mal schauen ob ich mir das nochmal anders überlege. :rolleyes:
Quote:
Originally Posted by rockhorst View Post
danke für die Antwort.
Momentan gebe ich in der ReviveMerc im Town Script nur aus, dass der Merc wiederbelebt wurde.
Das Problem ist, dass ich nicht weiß wie ich da an das aktuelle Script komme.
Vielleicht noch ein kleiner Hinweis?

Danke und Gruß
Wie gesagt, die Variante ist alles andere als präzise, das solltest du dabei immer bedenken, elegant ist anders. ;)

An das Skript kommst du beispielsweise so:
Code:
var _script;

_script = GetScript();

if(_script)
{
    do
    {
        if(_script.running)
            Print("Active script: " + _script.name)
    } while(_script.GetNext());
}
Aber Vorsicht: _script.running ist für sämtliche laufenden Skripte true, also auch für alle im Threads die im Hintergrund mitlaufen. Darum wirst du für diese noch Ausschlussbedingungen hinzufügen müssen, damit du wirklich nur das aktive Botskript isolierst. ;)

Lg
Muddy
12/08/2010 14:48 fred9x9#426
Quote:
Originally Posted by fred9x9 View Post
Zum leveln kleiner Chars benutze ich gerne MWFlayerJungle.ntj (classicChar).
Ok, klapp wunderbar, aber die Flayer mit dem Kopfschmuck verpuppen sich nach dem Ableben. Diese neuen aufgewärmten Flayer werden nicht erkannt. Ist schon doof, wenn dann irgendwann so einige Biester sich am Char festknabbern und der nix macht :-(
Welcome update !!
Muddy, ich kann es nur mit meinen Worten versuchen besser zu beschreiben.
Im Schinderdschungel(Flayerdjungle) rennen einige flayers mit einem Kopfschmuck (schinderschamanen) herum. Die sind i.d.R. mit cold zu killen. Wenn sie gekillt wurden, werden diese zu neuen flayerchars, dann coldimmun, wären also mit fire zu killen. Für die Killroutine scheinen sie aber nicht zu existieren (da tot?). Tja und die nerven dann, vor allem, wenn es mehrere sind.
12/08/2010 16:01 Muddy Waters#427
Quote:
Originally Posted by fred9x9 View Post
Muddy, ich kann es nur mit meinen Worten versuchen besser zu beschreiben.
Im Schinderdschungel(Flayerdjungle) rennen einige flayers mit einem Kopfschmuck (schinderschamanen) herum. Die sind i.d.R. mit cold zu killen. Wenn sie gekillt wurden, werden diese zu neuen flayerchars, dann coldimmun, wären also mit fire zu killen. Für die Killroutine scheinen sie aber nicht zu existieren (da tot?). Tja und die nerven dann, vor allem, wenn es mehrere sind.
Das habe ich aber diesmal besser verstanden, eventuell haben mich auch nur die Begriffe etwas verwirrt. ;)

Wie dem auch sei, ich habe das Problem nicht direkt reproduzieren können, dennoch konnte ich die Ursache nachvollziehen, was für eine Lösung ausreichend ist. :)

Zunächst mal zur Ursache:
Ein Monster wird dann als ungültiges Ziel betrachtet, wenn seine Hitpoints kleiner gleich Null sind, es sich im Zustand mode 12 (tot) oder mode 0 (sowas wie sterbend).

Bei den Schamanen ist es nun so, dass das Monster, was sie hinterlassen (übrigens dem Namen nach auch ein Schamane, aber mit anderer classid), den mode des ursprünglichen Schamanen übernehmen. Damit sind sie dem mode nach ein ungültiges Ziel und werden ignoriert.

Ich denke in LoD wird das kaum auffallen, da sich dort der Merc ganz nebenbei darumm kümmern würde, in Classic aber durchaus problematisch, das sehe ich ein.

Abhilfe kann man schaffen, indem man die Definition eines gültigen Ziels anpasst, welche in der Funktion NTA_IsValidMonster(monster) definiert wird.

Dazu ist die Bedingung
Code:
if(monster.hp <= 0 || monster.mode == 0 || monster.mode == 12)
        return false;
in
Code:
if(monster.hp <= 0 && (monster.mode == 0 || monster.mode == 12))
        return false;
zu ändern.

Ich werde mir erstmal anschauen, ob diese Änderungen irgendwelche Nachteile mit sich bringt und sie übernehmen, falls dem nicht so ist.

Lg
Muddy
12/09/2010 19:00 seifenoper#428
Guter Bot Muddy, knapp hinter Bluebird (direkter, schneller) meilenweit vor Sternlooper (total übrfrachtet mit zusammengewürfelten Funktionen, langsam).

Aber könntest Du die MW Verknüpfungen entfernen?
Ich weiss das ist dein Markenzeichen, macht den Bot aber absolut unbrauchbar für eigenes Feintuning.
12/09/2010 20:09 Muddy Waters#429
Quote:
Originally Posted by seifenoper View Post
Guter Bot Muddy, knapp hinter Bluebird (direkter, schneller) meilenweit vor Sternlooper (total übrfrachtet mit zusammengewürfelten Funktionen, langsam).

Aber könntest Du die MW Verknüpfungen entfernen?
Ich weiss das ist dein Markenzeichen, macht den Bot aber absolut unbrauchbar für eigenes Feintuning.
Verknüfpungen?

Falls du die Bezeichner meinst: Unter Garantie werde ich die nicht ändern. ;)
Mal abgesehen davon, höre ich mir gerne an, inwieweit Bezeichner von Variablen und Funktionen ein "eigenes Feintuning" verhindern. Die Aussage ist für mich so nicht nachvollziehbar, darum höre ich mir gerne an, wo das Problem liegt. :)

Lg
Muddy
12/09/2010 21:02 Deutsche-Mafia#430
Quote:
Originally Posted by seifenoper View Post
Guter Bot Muddy, knapp hinter Bluebird (direkter, schneller) meilenweit vor Sternlooper (total übrfrachtet mit zusammengewürfelten Funktionen, langsam).
aha!

was meinst du mit direkter?
ich würde sagen die sind alle gleich schnell, kann es sein das dich der ein oder andere bot überfordert?^^

Muddy's D2NT ist allerdings der einzige bot, an dem noch gebastelt wird ( im positiven sinne :D ).
12/09/2010 22:14 seifenoper#431
Quote:
Originally Posted by Muddy_Waters View Post
Verknüfpungen?

Falls du die Bezeichner meinst: Unter Garantie werde ich die nicht ändern. ;)
Mal abgesehen davon, höre ich mir gerne an, inwieweit Bezeichner von Variablen und Funktionen ein "eigenes Feintuning" verhindern. Die Aussage ist für mich so nicht nachvollziehbar, darum höre ich mir gerne an, wo das Problem liegt. :)

Lg
Muddy
Zum Beispiel wenn ich nen anderes Area Script von Bot "x" nehme funktioniert das nicht, da die verweisung auf MWBot fehlen im Script.

Hab mal das Kurast Travel vom Bluebird versucht, läuft bei deinem nicht. Dein Kurast Travel ist ja nen ganz anderes (keine Truhen in Unter ? Kurast, sondern die Tempel)
12/10/2010 02:45 2face1337#432
:facepalm: wenn du dir ma nen script anschauen würdest und nicht nur kopieren vom einem zum anderen, hättest du es bestimmt geschaft in dem script alle NTBotGame.ntj in MWBotGame.ntj zu ändern damit des auch läuft
12/10/2010 12:30 seifenoper#433
MWConfig_PickItemsInstantly = false; // Pickup items instantly whenever a monster is killed

was genau bewirkt das im Code, wonach richtet der Bot seine ItemPick Anweisungen?


Habe den ca 2 Wochen laufen lassen mit "false" und es war sogut wie nix in der Truhe. Dagegen 2 Wochen mit Bluebird brachte ordentliches Drop Ergebniss - selbes Setup (kann natürlich Zufall sein).

Rein vom Gefühl her, da ich die Pickroutine nicht kenne, erstrecht nicht mit der Variablen wie oben beschrieben hab ich bedenken das der Sachen liegen lässt weil die PickIt Zuweisung zB genau jetzt für die Koordinaten fehlt?
12/10/2010 16:08 Muddy Waters#434
Quote:
Originally Posted by Deutsche-Mafia View Post
aha!

was meinst du mit direkter?
ich würde sagen die sind alle gleich schnell, kann es sein das dich der ein oder andere bot überfordert?^^

Muddy's D2NT ist allerdings der einzige bot, an dem noch gebastelt wird ( im positiven sinne :D ).
Vergiss IDevil nicht, der gute macht auch eine Menge, wenn nicht gerade im Urlaub. ;)

Quote:
Originally Posted by seifenoper View Post
Zum Beispiel wenn ich nen anderes Area Script von Bot "x" nehme funktioniert das nicht, da die verweisung auf MWBot fehlen im Script.

Hab mal das Kurast Travel vom Bluebird versucht, läuft bei deinem nicht. Dein Kurast Travel ist ja nen ganz anderes (keine Truhen in Unter ? Kurast, sondern die Tempel)
In dem Fall muss ich 2face1337 ein stückweit zustimmen. Du müsstest nur zwei Buchstaben innerhalb eines einzigen Parameters ändern und es würde aller Wahrscheinlichkeit nach funktionieren.
Ich habe wenige Standardfunktionen geändert und wenn doch, dann in der Regel so, dass die neu hinzugefügten Parameter nur einen Effekt haben, wenn die Funktion auch explizit mit diesen Parametern aufgerufen wird.
Auf normale Aufrufe haben die Änderungen so keine Auswirkungen und führen somit zu keinen Komflikten.

Und Kurast Travel sagt mir nichtmal was, bedenke dass die meisten Botskripte D2NT Standard sind und nur eine sehr kleine Zahl von mir stammt.
Ich arbeite in erster Linie an Funktionen innerhalb der common libraries. ;)

Achja, bedenke, dass das Einfügen von Botskripten, sofern vorher kein gleichnamiges Skript existierte, immer einen Neustart des D2NT Managers erfordert! Ansonsten kann das Script nicht ausgeführt werden, weil das passende script Objekt nicht instantiiert werden kann.

Quote:
Originally Posted by seifenoper View Post
MWConfig_PickItemsInstantly = false; // Pickup items instantly whenever a monster is killed

was genau bewirkt das im Code, wonach richtet der Bot seine ItemPick Anweisungen?


Habe den ca 2 Wochen laufen lassen mit "false" und es war sogut wie nix in der Truhe. Dagegen 2 Wochen mit Bluebird brachte ordentliches Drop Ergebniss - selbes Setup (kann natürlich Zufall sein).

Rein vom Gefühl her, da ich die Pickroutine nicht kenne, erstrecht nicht mit der Variablen wie oben beschrieben hab ich bedenken das der Sachen liegen lässt weil die PickIt Zuweisung zB genau jetzt für die Koordinaten fehlt?
Erstmal entspricht die Funktion (NTSI_PickItems() bzw. NTSI_SnagIt()), die die Items aufhebt, mit hoher Wahrscheinlichkeit zu etwa 95% der Funktion Funktion, wie sie Sterni, Blue und andere verwenden.

Diese Variable bewirkt, dass innerhalb der NTA_ClearPosition() Funktion, welche für das Töten aller gültigen Ziele in einem definierten Radius zuständig ist, nach jedem erfolgreichen Angriff geprüft wird, ob das angegriffene Ziel nun tot ist.
Ist dies der Fall, wird die Funktion NTSI_PickItems() ausgeführt, welche dafür sorgt, dass alle Items aufgehoben werden, die mit einer Zeile innerhalb der inkludierten .nip Files übereinstimmen.
Es macht für private games absolut keinen Sinn, diese Variable auf true zu setzen, weil der char ohnehin nach Items Ausschau hält, wenn der aktuelle Radius gesäubert ist.

Die Variable bewirkt somit nur, zu welchem Zeitpunkt Items aufgehoben werden. Ob ein Item überhaupt aufgehoben werden soll, entscheiden allein die .nip Files, für die aus meiner Sicht jeder selbst verantwortlich ist.
Meine hier enthaltenen .nip Files sind relativ großzügig, sodass unter Umständen eine Menge Dinge mitgenommen wird, die man nicht braucht.

Lg
Muddy
12/10/2010 19:06 fred9x9#435
Hallo Muddy!
Betr.: Soso im Classic mode
hier : Mein Lieblingsproblem, fire/cold -immune im cs
Also,
Hier erstmal Auszug aus der ..._soso.ntl

Code:
//------------------------------------------------------------------------------
	// Attack Configuration Classic Soso
	//------------------------------------------------------------------------------
	NTConfig_AttackSkill[0] = 50;	// First skill. Set to 0 if you won't
	NTConfig_AttackSkill[1] = 64;	// Primary skill to boss.
	NTConfig_AttackSkill[2] = 47;	// Primary untimed skill to boss. Set to 0 if you won't
	NTConfig_AttackSkill[3] = 64;	// Primary skill to others.
	NTConfig_AttackSkill[4] = 47;	// Primary untimed skill to others. Set to 0 if you won't
	NTConfig_AttackSkill[5] = 47;	// Secondary skill in case monster is immune to primary skill. Set to 0 if you won't
	NTConfig_AttackSkill[6] = 47;	// Secondary untimed skill. Set to 0 if you won't
	NTConfig_AttackSkill[7] = 43;	// Alternative untimed skill which is used if the target is immune to your untimed skill - mostly useful for FB/FO/Meteor sorcs or other sorcs that are using the same untimed Skills
	NTConfig_ClearPosition = true;	// Set to true if you want to clear area after killing boss.

	MWConfig_CheckImmunitySkills = [1, 2, 3, 4, 5, 6];		// Define the condition for a monster being immune; Add skill numbers (0-6) here; Example: [1, 3] means that a monster is considered immune if it is immune to both NTConfig_AttackSkill[1] and NTConfig_AttackSkill[3]
	NTConfig_BehaviourOnImmuneMonster = 1;		// Determine what the char is supposed to do when attacking immune Monsters; 0: Don't do anything (D2NT standard), 1: Get close to the target, use static field in case the monster is not immune to lightning, 2: Skip the Monster
	MWConfig_KeepDistanceToMonsters = true;		// Always check if monsters are closing in and back off, in case they get too close (Note: Activating this option will lead to ignoring the spectype of monsters when clearing rooms or spots --> Champions and bosses won't be attacked first, but the monster which is closest, no matter if it's a boss or a normal monster)
	// If you don't wish to evade monsters in a certain area, add it's areaid to MWConfig_EvasionExceptions - Check the file "areas.txt" in the sdk folder to view all areaids
	MWConfig_EvasionExceptions.push(73)
Im Cs killt sie fireimmunes mit coldorb und telekinese,
coldimmunes mit fireball
Cold und fireimmunes ignoriert sie und ich weiss nicht warum, sie sollte sich doch drantelen und... Ist zwar ärgerlich, aber dumm wird es erst wenn DeSeis oder Infector cold/fireimmun sind, dann macht die Soso garnichts mehr und wartet auf timeout. Eigentlich dachte ich auch hier "drauftelen und telekinese oder so. Nix ist.
Einstellungen in der charconfig hab ich schon viele versucht, sowohl checkimmunity, behaviouronimmuine, attakskills und static.
Bin wohl Bissel zu ... zum zum.
Kannst du mir helfen? B i d d e
Gehts mit dem Script oder kann man nur in der NTAttack was erreichen?
Vielleicht erinnerst du dich, ich habe das Problem schon etwas länger :pimp: