HowTo: Soso nutzt Statik NUR für Unique Bosse (ala Dia, Baal usw.)
Nachdem mich das jetzt so geärgert hat, dass entweder immer statik genutzt wird, oder garnicht, oder bei jedem boss der von irgendwo herkommt, hab ich mich hingesetzt und mir die Skripte mal ein wenig angeschaut.
!! Das ganze basiert auf der Bluebird Version von D2NT. Wie es mit anderen klappt kann ich euch nicht sagen !!
Warnung: Bevor ihr meine Änderungen vornehmt macht eine Sicherheitskopie von euren aktuellen (hoffentlich funktionierenden ) Dateien.
Im Spoiler findet ihr die alte Version, die ich mir selbst ausgedacht habe, welche nicht unbedingt benutzt werden sollte
Warnung: Bevor ihr meine Änderungen vornehmt macht eine Sicherheitskopie von euren aktuellen (hoffentlich funktionierenden ) Dateien.
Ausserdem funktioniert der Bot nach der Änderung (warscheinlich) NUR wenn ihr eine Zauberin benutzt. Auch wenn euer Paladin kein Statik benutzten kann, könnte ich mir vorstellen, dass der Bot sich aufhängt.
Wichtig: in der Charconfig MUSS "NTConfig_CastStatic = 100;" gesetzt sein, da ja sonst sowieso immer Statik genutzt wird.
Immer wenn Unique Bosse ala Diablo, Baal, Gräfin usw angegriffen werden wird die Funktion "NTA_KillMonster" aufgerufen. Das ist genau der Punkt an dem ihr angreifen müsst.
Im Ordner "...\scripts\libs\common\" findet ihr die Datei "NTAttack.ntl"
Davon macht ihr besser erstmal eine Sicherheitskopie.
Als nächstes sucht ihr den Abschnitt:
Code:
function NTA_KillMonster(classid)
{
...
und fügt folgendes nach "var _attackcount = 0;" (also vor der While-Schleife) ein:
Dabei gibt wie immer "NTConfig_CastStatic = 70;" an bis zu welchem Prozentsatz an gegnerischem Leben Statik genutzt werden soll.
Den Wert am Ende "NTConfig_CastStatic = 100;" NICHT ändern, da sonst bis zum Ende des Skripts wie normal Statik genutzt wird.
Selbst erkanntes Manko: Beim Diabloskript werden die Siegelbosse ebenfalls mit dem Skript getötet -> Sehr häufiger Chickenleave bei den Bossen.
Ich würde das ganze noch um eine If - Schleife erweitern, die einfach die Bosse aus dem Statikversuch rausnimmt, allerdings bin ich mir unsicher wie die Bosse aufgerufen werden.
Also im Diabloskript steht:
Code:
var _monstername = GetLocaleString(2851);
if(NTA_KillMonster(_monstername))
Wie sind die Namen notiert ? "Lord De Seis" z.B. ? und glaubt ihr man könnte über eine zusätzliche Schleife das Problem lösen ?
Nach fantastischer Hilfe von ist dann die folgende Version entstanden:
Stellt in eurer Charconfig den gewünschten Statik level bei
Code:
NTConfig_CastStatic = 60;
ein.
Anschliessend muss die Variable
Code:
var WRZ_staticenemys = ["Blood Raven", "Andariel", "Mephisto", "Diablo", "Baal"];
in der NTConfig.ntl deklariert werden. Hier kann jeder gewünschte Boss gelöscht / hinzugefügt werden, auf den ihr Statik anwenden möchtet.
Danach geht ihr in die "NTAttack.ntl", sucht nach der Zeile:
Ohne dir zu nahe treten zu wollen: irgendwie gehst du das reichlich unsinnig an.
NTA_KillMonster(classid) ist eine generische Funktion, es ist absolut nicht sinnvoll eine solche Funktion spezifischer zu machen. Das was du vorhast kann man sehr viel eleganter erreichen, indem man in der eigentlichen Angriffsfunktion für Sorcs ansetzt, also NTA_SorceressAttackInt().
Damit du selber tüfteln kannst, hier nur mal ein mögliches Grundkonzept:
Du legst ein Array an, indem du die Statik Ziele irgendwie spezifizierst. Das kann man über den Namen machen, über die Classid, über Spectypes...prinzipiell ist da alles möglich, der Einfachheit halber kannst du es ja vorerst nur mit Strings machen.
Jetzt schreibst du eine Funktion, der du jeweils die Unit des aktuellen Ziels übergibst und die daraufhin das Ziel mit den Spezifikationen in deinem Array abgleicht und dann, je nachdem wie dieser Abgleich ausfällt, true oder false zurückliefert.
Jetzt erweiterst du einfach das Argument der if-Anweisung um einen Aufruf eben dieser Funktion.
Das Ergebnis: Du hast eine viel allgemeinere Lösung, alle anderen Chars laufen wie bisher und du kannst ohne größeren Zusatzaufwand auch weitere Bosse als Statik Ziel in deiner Charconfig definieren (sofern du das oben genannte Array als Config variable deklarierst).
Da das eigentlich recht einfach ist, lasse ich dich mal tüfteln, wenn du es nicht hinbekommst kannst du schließlich einfach nachfragen.
Ich hätte jetzt gerne so nen Ironie "Schönen Dank auch" Knopf
Ok danke dass du mich miträtseln lässt
Ich versuche mal soviel umzusetzen, wie ich verstanden habe:
Quote:
Originally Posted by Muddy Waters
Du legst ein Array an, indem du die Statik Ziele irgendwie spezifizierst. Das kann man über den Namen machen, über die Classid, über Spectypes...prinzipiell ist da alles möglich, der Einfachheit halber kannst du es ja vorerst nur mit Strings machen.
Code:
var WRZ_staticenemys = ["BloodRaven", "Andariel", "Mephisto", "Diablo", "Baal"];
bin mir nichmehr sicher, aber bei Strings musste man doch "" verwenden ?
Quote:
Originally Posted by Muddy Waters
Jetzt schreibst du eine Funktion, der du jeweils die Unit des aktuellen Ziels übergibst und die daraufhin das Ziel mit den Spezifikationen in deinem Array abgleicht und dann, je nachdem wie dieser Abgleich ausfällt, true oder false zurückliefert.
Ok. da fängts dann an, dass es als nicht Programmierer schwierig wird
Code:
function CompareEnemy(target)
{
if (target = WRZ_staticenemys)
return "1";
else
return "0";
}
Quote:
Originally Posted by Muddy Waters
Jetzt erweiterst du einfach das Argument der if-Anweisung um einen Aufruf eben dieser Funktion.
Das wird warscheinlich noch nicht funktionieren, da der Abgleich mit den Namen nicht stimmt. Ich könnte mir vorstellen, dass die Funktion "GetLocaleString()" helfen könnte, aber die find ich grad nich
€dit:
Quote:
Originally Posted by Muddy Waters
Ohne dir zu nahe treten zu wollen: irgendwie gehst du das reichlich unsinnig an.
Für mich war das ganze schlüssig
Nene ich hab ja nicht umsonst geschrieben, dass ich gerne Verbesserungsvorschläge hätte
Sieht für den Anfang schonmal gar nicht so schlecht aus.
Deine Funktion passt noch nicht ganz. WRZ_staticenemys ist ja vom Typ Array, target ist ein Objekt vom Typ Unit. Dann verwechselst du noch den Zuweisungsoperator (=) mit dem Vergleichsoperator (==) und weist dem Parameter target in deiner Funktion einfach dein Array zu. Das ist zwar kein Syntaxfehler, aber sinnvoll ist es auch nicht.
Du musst stattdessen dein Array durchlaufen und jedes einzelne Element jeweils mit dem Namen des Ziels abgleichen, das würde dann so aussehen:
Code:
function CheckStaticTarget(target)
{
for(var i = 0; i < WRZ_staticenemys.length; i++)
{
if(typeof WRZ_staticenemys[i] == "string" && WRZ_staticenemys[i].toLowerCase() == target.name.toLowerCase())
return true;
}
return false;
}
Ich habe die Funktion auch mal anders benannt, versuch grundsätzlich selbstsprechend zu benennen, sprich aus dem Namen sollte zumindest im groben hervorgehen, was die Funktion eigentlich macht.
Wie du siehst habe ich auch den Rückgabewert verändert, dieser ist nun ein Objekt vom Typ Boolean.
Dadurch musst du auch bei deiner if-Anweisung keinen Vergleich mehr durchführen, sprich du kannst direkt schreiben:
Und ja, die Namen müssen passen, wobei durch obige Funktion schon die Groß- und Kleinschreibung ignoriert wird. Wenn du Blood Raven noch ein Leerzeichen spendierst, sollte das funktionieren. Aber ja, mit Local Strings wäre es noch schicker, allerdings bin ich meistens zu faul diese rauszusuchen. Blood Raven müsste die Local String ID 3111 haben.
Glauben tut man in der Kirche, aber nicht beim Programmieren - da sollte man nach Möglichkeit wissen, was man tut.
Und ja, das funktioniert so, es sei denn, ich habe mich irgendwo vertippt. target ist ein Objekt vom Typ Unit, welche Eigenschaften dieses hat, kannst du in meiner angefangenen nachschauen. Eine Unit repräsentiert wie der Name schon sagt eine Unit im Spiel, dazu gehören NPCs, Monster, Items, Objekte, Warps und Geschosse.
kal_el, hast du sowas auch für Affixe? xD
Wäre da mal für meine Pickit auf der Suche gewesen, aber es war mir dann zuviel Arbeit, alles aus den MPQs herauszusuchen!
Baal Leeech bot bleibt nach baal kill im game 06/17/2010 - Diablo 2 - 3 Replies hey leute
hab en problem mit meinem leechbot,
also ich leeche dia&baal und kämpfe auch mit aber nachdem baal gelegt wurde bleibt der bot einfach im game und tut nichts
kann mir vll jemand weiter helfen?
Light soso baal-cs bot probleme... 05/26/2010 - Diablo 2 - 5 Replies LvL 85
hab max vita und str für spirit geskillt
Fcr cap is geknackt
Skillung
1 wärme
1 tele
1 gewitter
[ Guide ] Nur Bosse im Diascript / Alles bei Baal 05/06/2010 - Diablo 2 - 4 Replies OK! Dann fang ich mal an... ;)
das im problemlösungsthread untergehen wird schreib ich mal einfach einen guide dazu
Hatte vor kurzem das Problem dass ich beim Dia script nur bosse killen lasse, allerdings kann ich dann baal nicht laufen lassen da er die nichtbossmobs im throne ignoriert und nur blöd auf die erste wave wartet während euch überall noch mobs mit todbringenden blitzen und fiesen messern attackieren!
Nun hab ich alles wieder umgestellt dass auch die normalen mobs gekillt...
Die Soso, der Merc und die Baal-Minions 04/27/2010 - Diablo 2 - 8 Replies Hallo zusammen,
seit einigen Wochen verfolge ich täglich das geschehen hier und habe mein ganzes Wissen übers botten hier glernt. Dafür schon mal Danke.
Aber leider verzweifle ich an einer Stelle.
Ich will meine Dualsorc (Blizzard/FB Level93) Baalruns machen lassen. Da in der 2. Welle der Baalminions ja Kälteimmune sind habe ich mal fix den Merc mit ner Insight CV, einer eth. bugged forti und einer eth. Andys ausgerüstet.
Hab Static ausgeschaltet, habe auch anhand der verschiedenen...
S: sorc sequenz für mm.bot mit STATIK 12/27/2009 - Diablo 2 - 1 Replies ja , trotz SUFU bin ich nicht fündig geworden. ich suche eine modifizierte light sorc sequence wo bei meppel und andi statik routinen eingebaut sind.
ich weiss noch , damals im mm.bot forum wurde mal so eine gepostet
wenn einer noch so ein ding hat , bitte um veröffentlichung ^^
greetz
S2Kat