[BotScript] Fast Dia & Clone Hunter für Muddy's D2NT
Ich hätte für Muddys Bot ein kleines Update für Diablo und einmal für Clone Diablo.
Fast Diablo:
Bei einem Diablo-Run hat man zusätzlich die Möglichkeit nur die Seals zu öffnen und dann Diablo zu killen. Ohne sich um jedes Monster zu kümmern. Sprich ein Fast Diablo Run.
Wichtig! Die Variable MWConfig_FastDiablo muss in der Datei NTConfig.ntl im Ordner char_configs hinzugefügt werden. Gesamte NTConfig.ntl
Code:
/**
* This file was modified by
* Check the programming section for updates and further scripts
* Last Update: 01/28/2011
*/
var MWConfig_Script = new Array();
var MWConfig_ChestExceptions = new Array();
var MWConfig_FindItemExceptions = new Array();
var MWConfig_ShrineExceptions = new Array();
var MWConfig_EvasionExceptions = new Array();
var MWConfig_CheckImmunitySkills = new Array();
var MWConfig_CommandAssignedToNumpad = new Array(10);
var MWConfig_BulletinBoardColors = new Array();
var MWConfig_BulletinBoardFileMode;
var MWConfig_BulletinBoardFilePath;
var MWConfig_LogStashToTxt;
var MWConfig_UseXMLItemlog;
var MWConfig_LogSoldItems;
var MWConfig_LowestRuneToLog;
var MWConfig_NipDebugMode;
var MWConfig_SortStash;
var MWConfig_TornadoRange;
var MWConfig_TwisterRange;
var MWConfig_TrapRatio = new Array();
var MWConfig_AttacksBeforeRepositioning;
var MWConfig_KeepDistanceToMonsters;
var MWConfig_AttackTimeLimit = new Array(5);
var MWConfig_StaticTargets = new Array();
var MWConfig_IsRusher = false;
var MWConfig_ActiveQuestersName;
var MWConfig_NumberOfCharsToRush;
var MWConfig_GetHoradricCubesInNorm;
var MWConfig_QuestSchedule = new Array();
var MWConfig_RushActs = new Array();
var MWConfig_EnterInvalidUberPortals;
var MWConfig_IntendedUberPortal;
var MWConfig_PauseOnLackOfKeys;
var MWConfig_PauseOnLackOfOrgans;
var MWConfig_ClearWaypointPaths;
var MWConfig_SkipHallsOfPain;
var MWConfig_TPWaypoints;
var MWConfig_WaypointCatcherActs;
var MWConfig_ShowGoldPickupsPerScript;
var MWConfig_ShowGoldPickups;
var MWConfig_ShowPotionPickups;
var MWConfig_UseFindItem;
var MWConfig_FindItemRange;
var MWConfig_BuyPotionsOnLackOfMana;
var MWConfig_PickLootedItemsInstantly;
var MWConfig_PickChestLootsInstantly;
var MWConfig_PickItemsInstantly;
var MWConfig_OpenAllNearbyChests;
var MWConfig_OpenChestsRange;
var MWConfig_ResetArmor;
var MWConfig_AlwaysSellTrashItems;
var MWConfig_IdentAtCain;
var MWConfig_IdentAfterPickup;
var MWConfig_MinItemsToIdent;
var MWConfig_ActivateNearbyShrines;
var MWConfig_SkeletonMinionCount;
var MWConfig_MageMinionCount;
var MWConfig_ReviveMinionCount;
var MWConfig_CheckSojSales;
var MWConfig_WorldEventAccount;
var MWConfig_WorldEventWaitTime;
var MWConfig_ClearPathToKurastTemplesSpectype;
var MWConfig_ClearPathToKurastSewersSpectype;
var MWConfig_ClearPathToSummonerSpectype;
var MWConfig_OpenMephistoChest;
var MWConfig_MephistoClearArea;
var MWConfig_KillFullInfectorMob;
var MWConfig_FastDiablo;
var MWConfig_StartAtStar;
var MWConfig_ClearPathToDurielSpectype;
var MWConfig_ClearPathToPitSpectype;
var MWConfig_ClearPathToTunnelsSpectype;
var MWConfig_SkipLevelOnWitches;
var MWConfig_SkipLevelOnSouls;
var MWConfig_SkipLevelOnDeathLords;
var MWConfig_SkipOnTombVipers;
var MWConfig_ClearCountessRoomsSpectype;
var NTConfig_NihlathakExtension;
var NTConfig_PindleskinExtension;
var NTConfig_ShenkExtension;
var NTConfig_ClearFrozenRiver;
var NTConfig_ClearGlacialTrail;
var NTConfig_ClearIcyCellar;
var MWConfig_SkipBaalOnDolls;
var MWConfig_SkipBaalOnSouls;
var NTConfig_KillBaal;
var NTConfig_ClearA3SewersLevel1;
var NTConfig_KillFireEye;
var NTConfig_ClearPitLevel1;
var NTConfig_KillBloodRaven;
var NTConfig_ClearHoleLevel1;
var NTConfig_KillRakanishu;
var MWConfig_DoBaalPreAttack;
var MWConfig_SuperChestAreas;
var MWConfig_SuperChestClearAreaRadius;
var MWConfig_IdleModeRuntime;
var NTConfig_StartDelay;
var NTConfig_AreaDelay;
var NTConfig_SnagDelay;
var MWConfig_ExitGameOnMissingPassword;
var NTConfig_SkipHealLife;
var NTConfig_SkipHealMana;
var NTConfig_UseMerc;
var NTConfig_LifeThresh;
var NTConfig_LifeRejuvThresh;
var NTConfig_ManaThresh;
var NTConfig_ManaRejuvThresh;
var NTConfig_LifeChicken;
var NTConfig_ManaChicken;
var MWConfig_UseChickenLog;
var NTConfig_MercLifeThresh;
var NTConfig_MercRejuvThresh;
var NTConfig_MercChicken;
var NTConfig_FreeSpace;
var NTConfig_Columns = new Array(4);
NTConfig_Columns[0] = new Array(10);
NTConfig_Columns[1] = new Array(10);
NTConfig_Columns[2] = new Array(10);
NTConfig_Columns[3] = new Array(10);
var NTConfig_MinGoldToStash;
var MWConfig_ReplaceLowQualityPotions;
var MWConfig_BeltTypeColQuantity = new Array();
var NTConfig_BeltColType = new Array(4);
var NTConfig_NIPFilePath = new Array();
var NTConfig_SnagRange;
var MWConfig_PickUpPriorityItemsFirst;
var MWConfig_PickUpMoneymakers;
var MWConfig_MinimumTpScrollCount;
var MWConfig_MinimumIdScrollCount;
var MWConfig_CarryKeys;
var MWConfig_ShowCubedGemsInCommonLog;
var MWConfig_ClearCubeAfterCubing;
var MWConfig_UseAdvancedCubingAlgorithm;
var MWConfig_RestrictKeptItemsFromCubing;
var NTConfig_Cubing;
var NTConfig_CubingItem = new Array();
var NTConfig_Gamble;
var NTConfig_GambleStartGold;
var NTConfig_GambleStopGold;
var NTConfig_GambleItem = new Array();
var MWConfig_AutoParty;
var NTConfig_PublicMode;
var NTConfig_CheckCloneDiablo;
var NTConfig_OpenChest;
var MWConfig_GameErrorLimit;
var MWConfig_UseTelekinesis;
var MWConfig_ShowOverheadStatus;
var NTConfig_AttackSkill = new Array(10);
var MWConfig_PrecastSkills = new Array();
var MWConfig_SwitchSlotsAfterBoPrecast;
var MWConfig_ClearBossPosition;
var NTConfig_ClearPosition;
var NTConfig_CheckSelfSafe;
var NTConfig_CheckMercSafe;
var MWConfig_CheckSelfSafeTown;
var MWConfig_CheckMercSafeTown;
Der Aufruf von Diablo sieht dann bei dem Charakter wie folgt aus:
Code:
MWConfig_Script.push(["NTDiablo.ntj", 10]);
MWConfig_StartAtStar = true; // false: start at entrance, true: start at star
MWConfig_FastDiablo = true; // Öffnet nur die Seals und killt Diablo (Schwerer-Modus)
MWConfig_KillFullInfectorMob = false; // Wird bei FastDiablo ignoriert!
Clone Diablo:
Ich hab den IP-Check mit dem Idle Bot kombiniert. (wenn es dazu bessere Vorschläge gibt bzw. so etwas ähnliches was ich übersehen hab, bitte um Aufklärung)
Neues Check-IP Script mit Idle-Bot: NTCloneHunter.ntj
Der Aufruf von dem Script sieht dann bei dem Charakter wie folgt aus:
Code:
// Prüft ob Game ein Clone-Diablo Game ist. Falls ja wird hier der Run angehalten.
// In der Datei scripts/NTBot/HotIP.ntl die IP's einstellen!
MWConfig_Script.push(["NTCloneHunter.ntj", 1]);
MWConfig_IdleModeRuntime = 5;
Beachtet das im Ordner NTBot die Datei HotIP.ntj angelegt werden muss. Diese Datei enthält dann die IP Adressen. BEISPIEL:
Code:
// ------------------------------------------------------------------------------------------
// Check die Hot-IP's auf der folgenden Seite:
// http://dclone.eskysse.com/index.php?l=3
// ------------------------------------------------------------------------------------------
// Hier beliebige Hot-IP's eintragen. Wenn nicht gesucht werden soll, einfach 0 eintragen.
// ------------------------------------------------------------------------------------------
var _hotips = [ "58", "44"];
------------------------
Würde mich über Feedback freuen
Beachtet das im Ordner NTBot die Datei HotIP.ntj angelegt werden muss. Diese Datei enthält dann die IP Adressen. BEISPIEL:
Code:
// ------------------------------------------------------------------------------------------
// Check die Hot-IP's auf der folgenden Seite:
// http://dclone.eskysse.com/index.php?l=3
// ------------------------------------------------------------------------------------------
// Hier beliebige Hot-IP's eintragen. Wenn nicht gesucht werden soll, einfach 0 eintragen.
// ------------------------------------------------------------------------------------------
var _hotips = [ "58", "44"];
------------------------
Würde mich über Feedback freuen
Hi,
da du ja nach Feedback gefragt hast:
Warum genau hast du für die Konfiguration der HotIPs ein extra File angelegt? Dafür wäre doch genauso gut in der NTCloneHunter.ntj Platz gewesen, oder noch besser, so wie bei den meisten anderen Scripts auch einfach in der Char-Config nach gewohntem Schema (unter verwendung einer weiteren Variable, die z.B. zuvor in der NTConfig.ntl deklariert wurde:
Code:
// Prüft ob Game ein Clone-Diablo Game ist. Falls ja wird hier der Run angehalten.
// In der Datei scripts/NTBot/HotIP.ntl die IP's einstellen!
MWConfig_Script.push(["NTCloneHunter.ntj", 1]); MWConfig_IdleModeRuntime = 5; [COLOR="Red"]NTConfig_HotIPs = [ "58", "44"];[/COLOR]
Dies gäbe einem zudem die Möglichkeit zu entscheiden, ob bestimmte Charaktere z.B. unterschiedliche IPs suchen sollen (warum auch immer, mir fällt gerade kein wirklich guter Grund ein ), oder per Definition in der MWConfig_GlobalSettings.ntl für alle Chars die gleichen IPs zu verwenden.
Danke für dein Feedback, erscheint mir aber komisch bei unterschiedlichen Chars unterschiedliche IP's zu suchen.
Hinzu kommt das die IP's so schnell wechseln, diese für alle Chars immer wieder anzupassen wird nervig, glaub mir.
Daher ist diese Lösung die Beste wie ich finde aber nehm das Feedback gern so auf.
Achso, was ich nicht verstehe ist, dass in der Standard Konfiguration von Muddys Download alle MISC Scrips an sind. Sehr nervig für Neulinge wenn der Bott dann erstmal Cow, und mehrere male den Act wechselt. Allgemein finde ich könnte man die Char-Konfiguration per extra Programm vornehmen anstatt immer in der File selber rum zu fummeln. Hab da mal von einem Programm gehört, fand ich persönlich jedoch etwas unübersichtlich gestaltet.
Ja, wie gesagt, das war nur ein "zusätzlicher" Vorschlag, dass ggf. auch für einzelne Chars konfigurierbar zu machen. Allerdings bin ich nach wie vor der Meinung, dass man die IPs dann zumindest in der NTCloneHunter.ntj konfigurieren sollte, so spart man sich das 2. Script und weiß direkt, zu was diese Variable eigentlich gehört. Dabei wäre das Script nach wie vor als "Add-On" geeignet, ohne dass man noch die MWConfig_GlobalSettings modifizieren muss.
Klar, Arrays sind in JavaScript voll dynamisch, d.h. du kannst dort soviele Elemente einfügen, wie du willst. Prinzipiell musst du das Array dabei nichtmal mit Strings füllen, es reicht auch, wenn du bloße Zahlen schreibst, zum Vergleichen wird dann implizit gecastet.
bitte nehmts mir nicht übel, aber ich benutze BlueBird für D2NT und versuche mir gerade das diablo clone skript so zurechzubiegen, dass es funktioniert.
leider habe ich nicht besonders viel ahnung von programmierung.
mein skript sieht mittlerweile so aus:
immerhin ist mir schon aufgefallen, dass die version von "Muddy_Waters" MW statt NT nutzt und habe das ganze soweit abgeändert. die Variable "NTConfig_IdleModeRuntime" habe ich ebenfalls in der "NTConfig.ntl" im charfolder definiert.
wenn ich
Code:
NTConfig_Script.push(["NTCloneHunter.ntj", 1]);
benutze, dann sehe ich in der statusleiste: "Running NTCloneHunter.ntj,1" und nichts passiert.
wenn ich aus dem code das ",1" und die eckigen klammern entferne läuft das skript (glaube ich) schonmal an und ich bekomme dann aber als fehler:
"ReferenceError: NTC_Initialize is not defined"
gibt es diese funktion im Bluebird nicht ?
ich habe ausserdem versucht die funktion im Muddy skript zu finden, allerdings ohne erfolg
falls mir jemand helfen möchte wäre ich dem sehr verbunden
Also dafür dass du keine Ahnung hast, ist deine Denkweise schon erfreulich logisch und stringent.
In meiner Version kann man für Scripte immer auch die Maximallaufzeit mit angeben, darum erfolgt die Script Definition in Form eines eindimensionalen Arrays. Da Bluebird sowas nicht kann, vereinfacht sich das ganze wieder, sprich das Script wird nur über den Namen definiert. Richtig wäre damit:
Code:
NTConfig_Script.push("NTCloneHunter.ntj");
Das MW Präfix nutze ich dabei grundsätzlich für Funktionen oder Variablen, die ich entweder in ihrer Funktion drastisch bis komplett verändert habe, oder aber für Dinge, die ich entwickelt und hinzugefügt habe. Damit ist auch klar, warum deine Funktion nicht existiert: Weil das eben gerade eine Funktion ist, die D2NT von Haus aus nicht hat.
Ist in dem Fall aber nicht weiter tragisch, da die Funktion ohenhin nicht mehr macht, als andere Funktionen zur Initialisierung aufzurufen. Wenn du diese Aufrufe einfach direkt einfügst, sollte es klappen, also den MWC_Initialize()-Aufruf ersetzen durch:
naja ich werde seit 4 jahren im logischen denken alias physikstudium ausgebildet, aber das bisschen c programmierung aus dem ersten semester steckt nichtmehr so drin
aha die funktion hieß also NTA_Initialize();
mal schaun ob ich noch verstehe was InitCubing
ok jetzt läuft er an, sagt, dass ich keine hotIP habe, aber fährt dann nicht mit dem nächsten skript fort. fehlt da noch sowas wie eine "endscript" oder so ?
€dit: hm ok. scheinbar hatte ich ein wenig in der "NTBotGame.ntj" rumgepfuscht (kann mich nich dran erinnern aber egal)
mit der originalen funzt alles wieder
ok erstmal sorry für den doppelpost aber sonst würde hier ja niemand mehr reinschauen ^^
irgendwie funktioniert das ganze noch nicht so ganz wie ich mir das wünsche/denke/vorstelle/glaube dass es gedacht ist.
folgendes: er hat eine hot ip gefunden.
das aktwechseln usw funktioniert ganz gut bis er bei folgendem stehenbleibt:
genau diese anzeige bekomme ich seit 10 minuten. kein aktwechsel. nichts.
der eintrag "NTConfig_IdleModeRuntime = 5;" in der char config setzt doch nur den wert der variable auf 5 richtig ? ich blicke noch nich so ganz in deinen while schleifen durch aber ich finds doch recht verdächtig, dass er genau bei 4:59 stehen bleibt wo doch die variable auf 5 gesetzt wird.
ist "!NTConfig_IdleModeRuntime" sowas wie "not NTConfig_IdleModeRuntime" ?
also nicht 5 oder 5*6e4 + (_starttick = GetTickCount() größer als GetTickCount()
GetTickCount() ist sowas wie die uhrzeit ? dann ist mir fast klar warum er bei 4:59 stehen bleibt. nach 5 minuten ist 5 + startuhrzeit nichtmehr größer als die aktuelle zeit. demnach wechselt er nichtmehr die einzelnen akte.
also springt er aus der schleife raus und macht:
NTC_Delay( _idletime ); -> er wartet ne stunde.
da kommt dann der part ins spiel den ich nicht verstehe. warum 5 minuten lang den akt wechseln und so ein "getting kicked" verhindern und nach 5 minuten einfach nichts machen und ne stunde warten ?
ich kann mir nicht vorstellen, dass es so gedacht ist und "hoffe" dass ich da was falsch verstanden habe und bitte um hilfe
So wie es aussieht, würde das DClone-Script wirklich so ablaufen, wie du es vermutest:
Zuerst wird NTConfig_IdleModeRuntime Minuten der Akt gewechselt und dann wird 1 Stunde an der Stelle gewartet.
Ich würde dir empfehlen, die Variable NTConfig_IdleModeRuntime in der NTCloneHunter.ntj auf die Zeit zu setzen, die du warten willst.
Kannst es natürlich auch in der Charconfig machen, dann löscht du am besten die Zeile, wo die Zeit gesetzt wird.
Dafür ersetzt du am besten diese Zeile:
Code:
var _idletime = 3600000; // Wartezeit im Game bei Hot-IP Fund (in ms), bevor der Bot weiterläuft ( 3600000 ms = 1 Stunde )
mit (WICHTIG: das var wird nicht gebraucht, da es in der NTConfig.ntl ja gesetzt wird! Schöner wäre es natürlich, wenn es nicht in der Charconfig gesetzt wird, die Variablendefinition in der NTClonehunter.ntj zu machen...):
Code:
NTConfig_IdleModeRuntime = 60; // Wartezeit in Minuten im Game bei Hot-IP Fund
dann hab ichs tatsächlich richtig verstanden. wundern tuts mich trotzdem weil es ja so doch wirklich keinen sinn ergibt (oder?).
ich versuch mir das ganze jetzt mit dem shopping skript zu verbinden, also dass er in der wartezeit einfach zu anya ne runde shoppen geht
mal schaun obs klappt
[Release] Muddy's D2NT 01/25/2021 - Diablo 2 Programming - 7420 Replies AnnouncementPlease note: development discontinued! / Bitte beachten: Entwicklung eingestellt!
English
I am discontinuing development of this version and will henceforth focus on bot development using D2BS.
According to this, there won't be any major updates, but merely smaller bug fixes at best.
Focusing on D2BS, I will decrease my efforts in supporting this project, since it has become way too time-consuming.
I might still check this topic every now and then and offer my support, but...
D2NT Muddy's error beim sellen 04/04/2011 - Diablo 2 Trading - 1 Replies Hallo liebe Community,
ich habe den D2NT von Muddys, er läuft auch einwandfrei bis er items findet die er sellen will!
bekomme dan einen Diablo2 Error
Diablo2 : Halt Location: , line #2245 - Expression : Unrecoverable internal error 6fb422e5
kann damit nix anfangen und hab schon vieles ausprobiert..dacht es liegt vllt an meiner pickit..aber find keinen fehler... kann mir jemand helfen?
Muddy's D2Nt 01/04/2011 - Diablo 2 - 3 Replies Hallo zusammen
Mein Problem: Mein barb greift niemanden an. Er öffnet Truhen und geht dann wieder in die Stadt. Das ganze sieht etwa so aus:
//----------------------------------------------- -------------------------------
//Attack Configuration
//---------------------------------------------- --------------------------------
NTConfig_AttackSkill = 154; // First skill. Set to 0 if you won't
NTConfig_AttackSkill = 151; // Primary skill to boss.
NTConfig_AttackSkill = 0; //...
Muddy's D2NT Help 07/29/2010 - Diablo 2 - 3 Replies hi i just started to use the bot it work's great.
how do i set up the skill's i use on my Sorc and pick up itme's?
.....
if you reply to this post please use english
Wie ist ein Botscript aufgebaut D2NT [Guide] 01/25/2010 - Diablo 2 Programming - 0 Replies Ein Script läuft immer von Oben nach unten ab.
Beispiel NTSummoner.NTJ
Wie man sehr gut sehen kann werden einfach Funktionen, welche über die files im Ordner "scripts\libs\common" definiert sind in der gewünschten reihenfolge abgespielt.
Man muss also kein Coder sein, um ein Botscript an seine eigenen Wünsche anzupassen.