|
You last visited: Today at 13:27
Advertisement
[Release] Muddy's D2NT
Discussion on [Release] Muddy's D2NT within the Diablo 2 Programming forum part of the Diablo 2 category.
05/24/2012, 17:39
|
#6511
|
elite*gold: 0
Join Date: Jun 2010
Posts: 25
Received Thanks: 8
|
Quote:
Originally Posted by Playboy91
Hey habe nun nochmal ne frage, die irgendwann mal untergegangen ist.
Und zwar mache ich Private Baalruns, aber wenn ich mit meiner zweiten sorc rein will join sie das game und leavt wieder. Habe schon einiges hin und her probiert, aber finde selbst keine lösung dazu.
|
Machen die beiden denn eine Party?
Wenn nicht hast du vermutlich vergessen Publicmode beim Leader anzumachen.
Quote:
also bei mir startet er gar nicht mal^^ ich starte ihn
er startet d2 gar nicht sondern restart das profil einfach alle 6 sec ^^
|
Also ohne weitere Angaben ist da schwer was zu sagen. Eventuell Stürzt d2 ab.
Welches Betriebssystem, als admin ausgeführt? Farbpalette stimmt? Läuft D2 überhaupt ohne D2NT ? etc...
|
|
|
05/24/2012, 18:04
|
#6512
|
elite*gold: 0
Join Date: Sep 2010
Posts: 38
Received Thanks: 16
|
Quote:
Originally Posted by shytim
Meine Vermutung wäre, dass der Bot den TP Skill benutzt, der aus dem Folianten Zaubert und du nur ein einzelnes TP im Inventar hast. (Ja es gibt 2 verschiedene, einen für einzelne TPs und einen für Folianten)
Ich bin auf der Suche nach folgenden Funktionen:
Überprüfen ob ein Partymitglied in der nähe ist.
Überprüfen ob man selbst BO hat.
Überprüfen ob alle Partymitglieder in der nähe BO haben.
Leaven wenn der Leader geht. => [gelöst mit "while(NTC_InMyParty(NTConfig_Leader)"]
Mit delays ist das ganze ziemlich ungenau und falls mal ein FTJ kommt gibts kein BO
Gibt es eine Liste mit implementierten Funktionen?
Vielen Dank schon mal 
|
Danke für die Info - ich habe jedoch einen kompletten Foliaten, der auch auf 20 tps aufgefüllt ist.
Sonst einer eine Idee?
|
|
|
05/24/2012, 18:07
|
#6513
|
elite*gold: 0
Join Date: May 2011
Posts: 44
Received Thanks: 1
|
Quote:
Originally Posted by shytim
Machen die beiden denn eine Party?
Wenn nicht hast du vermutlich vergessen Publicmode beim Leader anzumachen.
|
nein machen sie nicht und public mode war nicht an, aber es sind ja auch private runs also mit PW
|
|
|
05/24/2012, 18:16
|
#6514
|
elite*gold: 0
Join Date: Jun 2010
Posts: 25
Received Thanks: 8
|
Quote:
Originally Posted by Playboy91
nein machen sie nicht und public mode war nicht an, aber es sind ja auch private runs also mit PW
|
Ohne Publicmode gibts auch keine Leecher.
Wenn Publicmode aus is, dann wird kein Tp gemacht und wie soll dann der Leecher hinunterkommen ?
|
|
|
05/24/2012, 19:31
|
#6515
|
elite*gold: 0
Join Date: Mar 2008
Posts: 32
Received Thanks: 1
|
Also ohne weitere Angaben ist da schwer was zu sagen. Eventuell Stürzt d2 ab.
Welches Betriebssystem, als admin ausgeführt? Farbpalette stimmt? Läuft D2 überhaupt ohne D2NT ? etc...[/QUOTE]
naja d2 läuft auch ohne d2nt nur brauchts meist ne weile zum laden nur erscheinen tuts trotzem immer schon in der leiste
win 7 als admin ja
farbpalette ka? was soll ich da einstellen hab vor ner ewigkeit glaub aber was gemacht
|
|
|
05/24/2012, 20:01
|
#6516
|
elite*gold: 0
Join Date: May 2011
Posts: 44
Received Thanks: 1
|
Quote:
Originally Posted by shytim
Ohne Publicmode gibts auch keine Leecher.
Wenn Publicmode aus is, dann wird kein Tp gemacht und wie soll dann der Leecher hinunterkommen ? 
|
public mode hin oder her, er leavt auch wenn public mode aktiviert ist^^
|
|
|
05/24/2012, 22:46
|
#6517
|
elite*gold: 0
Join Date: Jun 2010
Posts: 25
Received Thanks: 8
|
Quote:
|
public mode hin oder her, er leavt auch wenn public mode aktiviert ist^^
|
Machen Sie denn jetzt eine Party? Was kommt denn für ein Fehler, sowohl ingame als auch im Manager? Zu welchem Zeitpunkt wird genau das Spiel verlassen, wird der Akt gewechselt.....
Was hast du denn umgestellt? Irgendwo muss ja der fehler hineingekommen sein. Bei mir wars nichts weiter als Baallech auskommentieren party machen lassen und schon hats funktioniert. Hier laufen drei Chars munter mit in den Thronsaal und kloppen mit.
Zeig doch mal beide Configs, vielleicht lässt sich da was finden.
Und am besten nen Ingamescreenshot kurz vorm leaven.
Lasst euch doch bitte nicht immer alles aus der Nase ziehen.
|
|
|
05/25/2012, 05:46
|
#6518
|
elite*gold: 0
Join Date: Jan 2009
Posts: 3,170
Received Thanks: 1,191
|
Verlässt er das Game,weil du MissingOnPassword auf true gesetzt hast?
|
|
|
05/25/2012, 08:23
|
#6519
|
elite*gold: 0
Join Date: May 2012
Posts: 1
Received Thanks: 0
|
Ich bin erst neu hier und benutze zum ersten mal Muddys d2nt 1.3 bot auf windows 7.
Aber ich hab folgendes problem:
Nach dem game wenn der run fertig ist closed sich das bot fenster und startet neu.
wollte wissen wie man das vermeiden kann sodas der bot ohne restart laufen kann
Hoffe ich könnte schnell eine antwort bekommen
|
|
|
05/25/2012, 21:18
|
#6520
|
elite*gold: 0
Join Date: Jun 2010
Posts: 25
Received Thanks: 8
|
Quote:
Originally Posted by CoD-Rafi
Nach dem game wenn der run fertig ist closed sich das bot fenster und startet neu.
|
Meine Vermutung wäre, dass du in den Einstellungen deines Profils nur einen CDKey angegeben hast, aber bei Game#/CDKey was größeres als 0 stehen hast.
Damit versucht er jedes mal den Key zu wechseln. Wenn es so ist, dann sollte sich das ganze lösen lassen, indem du einfach die Game#/CDKey auf 0 setzt.
|
|
|
05/26/2012, 21:25
|
#6521
|
elite*gold: 0
Join Date: Apr 2012
Posts: 14
Received Thanks: 0
|
hey Hoy kann mir einer sagen wie ich die Attacken für ne light sorc macht?
|
|
|
05/27/2012, 00:53
|
#6522
|
elite*gold: 0
Join Date: Jun 2010
Posts: 25
Received Thanks: 8
|
Quote:
Originally Posted by VegaFFM
hey Hoy kann mir einer sagen wie ich die Attacken für ne light sorc macht?
|
Auf der ersten Seite in diesem Thread unter dem Link  findest du die folgende Frage:
Wenn man dort im Sorceress Spoiler guckt, dann steht bei Lightning folgendes:
Code:
// Specify your attack skills below. NOTE: Constants for all skill ids can be found in "scripts\libs\common\MWSkills.ntl".
NTConfig_AttackSkill[0] = MWS_CHARGED_BOLT; // This skill is used once whenever attacking a new target. Set to -1 to deactivate.
NTConfig_AttackSkill[1] = MWS_LIGHTNING; // Primary skill to bosses.
NTConfig_AttackSkill[2] = -1; // Primary untimed skill to boss. Set to -1 to deactivate.
NTConfig_AttackSkill[3] = MWS_CHAIN_LIGHTNING; // Primary skill to others.
NTConfig_AttackSkill[4] = -1; // Primary untimed skill to others. Set to -1 to deactivate.
NTConfig_AttackSkill[5] = -1; // Secondary skill in case monster is immune to primary skill. Set to -1 to deactivate.
NTConfig_AttackSkill[6] = -1; // Secondary untimed skill. Set to -1 to deactivate.
NTConfig_AttackSkill[7] = -1; // 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. Set to -1 to deactivate.
Alleine deinen Post zu verfassen hat vermutlich drei mal so lange gedauert als einfach zu lesen und dann hättest du die Antwort sofort gehabt...
|
|
|
05/27/2012, 09:04
|
#6523
|
elite*gold: 0
Join Date: May 2011
Posts: 14
Received Thanks: 1
|
Hi leute
ich benutze muddy d2nt seit gestern und hab ein problem. Ich mache public baalruns mit meinem hammerdin (leader, lvl 95) und lasse da mein necro leechen, ansich klappt das ganz gut. Mein problem ist, das d2 meines pala jedes mal bei baal 2.wave abstürzt, ohne fehlermeldung.
Ich benutze 1.cdkey pro bot, also leader hat 1 und leecher hat 1.
kann mir bitte jemand helfen......
LG
EDIT: Ich hab das problem gefunden, es lag an der attackconfig für immune in der charconfig
|
|
|
05/27/2012, 21:20
|
#6524
|
elite*gold: 2
Join Date: May 2009
Posts: 1,024
Received Thanks: 114
|
wird trapsin noch überarbeitet? ist ja leider sehr buggy 
bzw wo kann ich einstellen das sie näher an die monster telet?.. die ist ja immer 10 meter von den monster entfernt.
und noch eine frage, wo ist hier der fehler? ich möchte das mein char den channel op babybaal joint, doch er joint nur DEU-x
Code:
/**
* This file was modified by [EMAIL=" "] [/EMAIL]
* Check the programming section for updates and further scripts
* Last Update: 11:25 05.11.2011
*/
//------------------------------------------------------------------------------
// Delays
//------------------------------------------------------------------------------
var GameMinLength = 120; // Time in seconds, minimum game length, 180 seconds default (1 game/3 minutes).
var UnableToConnectRetry = 5; // Time in minutes to retry connecting on connection fail (real value is +/- 1 min).
var RealmDownRetry = 15; // Time in minutes to retry connecting on a realm down (default is 300 minutes).
var DisconnectedRetry = 5; // Time in minutes to retry on a disconnection (usually ip ban related).
var CdKeyInUseRetry = 5; // Time in minutes to retry on a cdkey in use error message (set to 0 to stop).
var ConnectingToBnetTimeout = 20; // Time in seconds to wait for a login to Time out and click cancel and retry.
var CharacterScreenTimeout = 10; // Time in seconds to wait for character screen to appear.
var PleaseWaitTimeout = 10; // Time in seconds to wait for a please wait popup.
var CreateGameThreshold = 10; // Time in seconds to wait between making games.
var CreateGameThresholdRandom = 1; // Time in seconds to randomly add +/- to the game create time.
var CreateGameTimeout = 15; // Time in seconds to register a failed to create game.
var WaitInLineTimeout = 60; // Time in seconds to wait in lines for a create game (60 second default).
var CharacterSelectDelay = 1000; // Time in milliseconds to wait before selecting a character on the char screen.
var GameDoesNotExistDelayMin = 10; // How long to wait when a Game Does Not Exist occurs - minimum - default 10 minutes.
var GameDoesNotExistDelayMax = 15; // How long to wait when a Game Does Not Exist occurs - maximum - default 15 minutes.
var GameDoesNotExistTimeout = 30; // How long to wait for the dialog to disappear (default 30 seconds, don't change this).
// Control
var LoginDelay = 5000; // Time in milliseconds to wait before submitting login information.
var ClickDelay = 2000; // Wait X milliseconds before next action after a click event.
var TextDelay = 2500; // Wait X milliseconds before next action after inserting text into a textbox.
var ClickDelayRandom = 500; // Random amount of Time in milliseconds to add to a click.
var TextDelayRandom = 500; // Random amount of Time in milliseconds to add to a text set.
// Channel
var WaitBeforeEnterChatMin = 1000; // Min time in milliseconds to wait before entering chat.
var WaitBeforeEnterChatMax = 2000; // Max time in milliseconds to wait before entering chat.
var WaitInChatBeforeActionsMin = 2000; // Min time in milliseconds to wait before joining channel.
var WaitInChatBeforeActionsMax = 3000; // Max time in milliseconds to wait before joining channel.
var GameAnnouncementDelay = 5000; // Wait X milliseconds before posting the announcement message (don't set this too low!).
var GameAnnouncementDelayRandom = 500; // Random amount of time to add to a to the announcement delay.
var UseFileBackupTimeMax = 30; // Time in minutes that may pass since last file update - The backup File is updated at the beginning of every single game and is read everytime the name of your previous game is undefined (e.g. at restarts); Set to 0 to deactivate file backup.
//------------------------------------------------------------------------------
// Game settings
//------------------------------------------------------------------------------
var PlayersPerGame = 8; // Maximum number of players to be set when creating a game.
var CharacterDifference = 90; // Level difference to be set when creating games. Set to 0 not to use level restrictions.
var GameDescription = ""; // The description to be used for your game. Set to "" not to enter a game description.
var JoinRandomGamesChars = new Array("Goold");// Dynamic array that holds chars that are to join public games.
var JoinGameKeywords = new Array("dia", "baal"); // If your char is set to join public games, games will only be joined if the game name contains one of the given keywords.
//------------------------------------------------------------------------------
// Channel Settings
//------------------------------------------------------------------------------
var IgnoreWispers = true; // Set to true to ignore all incoming wispers from players that are not on your friendlist.
var JoinChatAfterLogin = true; // Join chat after login.
var JoinRandomChannel = false; // If this is true, will join a random channel, otherwise it will use the channel below..
var JoinChannelInChat = "Op Babybaal"; // Leave blank not to join a private channel.
var PerformChannelLogin = true; // Type ".login" once after joining the channel.
var ChannelUsers = new Array(); // Dynamic array that holds channel users.
// Add any char/account here that is supposed to perform chat actions/game announcements or join a private channel
ChannelUsers.push("YourCharNameGoesHere");
// Or
ChannelUsers.push("YourAccountNameGoesHere");
// The following key expressions will be replaced by their actual values: %game --> "gamename-" <> %counter --> number of the next game <> %time --> time in seconds till game creation <> %password --> game password
// Note that the announcement will start after the first run, so there usually won't be any anncouncement right after login - If the gamename is undefined, the bot will try to load the backup file to announce the upcoming game properly.
var GameAnnouncement = "Creating %game%counter//%password in about %time seconds.";
var ShowStatusOnStartup = true;
var JoinRetries = 5; // How many attempts before giving up the mule game?
var JoinRetryDelay = 55; // Seconds to wait between Retry Attempts.
var TimeBeforeMuleGame = 1; // Minutes to wait before creating the game.
var TimeAfterMule = 3; // Minutes to wait before logging back to bot account.
var WaitOnBlockedAccount = 2; // Minutes to wait if the mule account is currently being used by another char (this delay will be used up to 20 times).
//------------------------------------------------------------------------------
// Misc
//------------------------------------------------------------------------------
var MaximumLocationLoops = 5; // The maximum number of loops for a single location; if the window is does not respond and is caught in an infinite loop it will be restarted when the number of loops exceeds the one you specify here.
//---------------------------------------------------------------------------------------------------------------------------------------------------------
// DONT EDIT ANYTHING BELOW THIS!
//---------------------------------------------------------------------------------------------------------------------------------------------------------
// AutoMule Variables and Stuff
const DGDebug = false;
const AUTOMULE_READY = 1;
const AUTOMULE_FULL = 0;
const AUTOMULE_NOMULES = -1;
function AutomuleData()
{
this.InProgress = false;
this.PreventRecover = false;
this.IsWaiting = false;
this.State = "notmuling";
this.CurrentAccount = 0;
this.MuleIndex = 0;
this.IsReadyState = AUTOMULE_READY;
// Account creation variables
this.CreateAccount = false;
this.CharCreateNumber = -1;
this.RegMail = "";
this.MuleFull = false;
this.AccName;
this.AccPw;
this.AccPrefix;
this.AccSuffix = new Array();
this.NewAccPw = new Array();
this.UserNumbers;
this.IsLadder;
this.IsHC;
this.IsClassic;
this.RandomNameLength;
this.GameName;
this.GamePassword;
this.Mules = new Array();
this.MuleAccs;
this.MulePws;
this.NipFiles = new Array();
this.CharLoc;
this.MuleIsFullThreshold;
this.JoinBug;
this.NewCharBug = 0;
this.FullAuto = false;
}
var Automule = new AutomuleData();
Include("libs/controlInfo.ntl");
Include("libs/common/NTCommon.ntl");
Include("NTBot/mule_configs/NTConfig_AutoMule.ntl");
NT_LoadMuleConfig();
Include("libs/common/DGAutoMule.ntl");
// D2NT Manager Command
const D2NT_MGR_LOADING = 1;
const D2NT_MGR_READY = 2;
const D2NT_MGR_LOGIN = 3;
const D2NT_MGR_CREATE_GAME = 4;
const D2NT_MGR_INGAME = 5;
const D2NT_MGR_RESTART = 6;
const D2NT_MGR_CHICKEN = 7;
const D2NT_MGR_PRINT_STATUS = 8;
const D2NT_MGR_PRINT_LOG = 9;
var LastGameMade = GetTickCount();
var LastGameStatus = 0;
var NextGameMake = 0;
var InGameAt = 0;
var LocationLoops = new Array(2);
var ChatActionsDone = false;
var LastGameFailed = false;
var JoinedChannel = false;
var JustJoined = true;
var MadeAnnouncement = false;
// This is for recovering purpose, delete mulestate file is you get stuck
DGAM_ReadMuleStats();
MWAM_ReleaseUsedAccounts();
MWAM_InitializedMuleLoads(false);
var ControlData = new controlInfo();
function NTMain()
{
var _ingame, _scriptPath;
Delay(1000);
_ingame = false;
ConnectingToBnetTimeout *= 1000;
GameMinLength *= 1000;
CharacterScreenTimeout *= 1000;
PleaseWaitTimeout *= 1000;
CreateGameThreshold *= 1000;
CreateGameThresholdRandom *= 1000;
CreateGameTimeout *= 1000;
WaitInLineTimeout *= 1000;
GameDoesNotExistDelayMin *= 1000*60;
GameDoesNotExistDelayMax *= 1000*60;
GameDoesNotExistTimeout *= 1000;
ControlData.ClickDelay = ClickDelay;
ControlData.TextDelay = TextDelay;
ControlData.ClickDelayRandom = ClickDelayRandom;
ControlData.TextDelayRandom = TextDelayRandom;
RegisterEvent(EVENT_SCRIPTMSG, DGAM_MuleMsgEvents);
while(true)
{
if(me.ingame)
{
if(!InGameAt)
InGameAt = GetTickCount();
if(!_ingame)
{
if(Automule.InProgress)
{
if(DGDebug)
NTC_SendLogToOOG(NTC_LOG_COMMON, "[Debug] Joined Mule Game");
switch(Automule.State)
{
case "notmuling": // Done or not yet started
// No... we really are not supposed to be here
Automule.InProgress = false;
ExitGame();
NTC_SendLogToOOG(NTC_LOG_COMMON, "AutoMule Error, try again.");
SetStatusText("ÿc1AutoMule Error... (Wait 60s)");
Delay(60000);
break;
case "mulestart": // Still on Bot Account
_scriptPath = "NTBot/bots/NTPermGameandMule.ntj";
break;
case "mule": //Muleing
case "mulefull": // Mule Full
case "done": // Next Account
case "recover": // Recovering
_scriptPath = "NTBot/bots/NTPickStuff.ntj";
break;
default:
_scriptPath = "NTBot/NTPermGameandMule.ntj";
break;
}
if(DGDebug)
NTC_SendLogToOOG(NTC_LOG_COMMON, "Debug: Load " + _scriptPath);
RunGC();
if(Load(_scriptPath))
{
_ingame = true;
Automule.JoinBugCount = 0;
MadeAnnouncement = false;
LocationLoops[1] = 0;
MW_WriteBackupFile();
if(me.playtype > 0)
NT_SendEventToOOG(D2NT_MGR_INGAME, "Currently in Mule Game", 0);
else
NT_SendEventToOOG(D2NT_MGR_INGAME, "Oops, that's not gonna work honey.", 0);
LastGameStatus = 2; // in game successful
}
}
else
{
RunGC(); // run garbage collector between each game
if(Load("NTBot/MWBotGame.ntj"))
{
_ingame = true;
MadeAnnouncement = false;
LocationLoops[1] = 0;
MW_WriteBackupFile();
if(me.playtype > 0)
NT_SendEventToOOG(D2NT_MGR_INGAME, "In Game [IP:" + me.gameserverip.split(".")[3] + "]", 0);
else
NT_SendEventToOOG(D2NT_MGR_INGAME, "In Game", 0);
LastGameStatus = 2; // in game successful
}
}
}
Delay(1000);
}
else
{
if(Automule.IsWaiting)
Delay(1000);
else
{
if(_ingame)
{
_ingame = false;
NT_SendEventToOOG(D2NT_MGR_READY, "", 0);
Delay(4000);
}
if(Automule.InProgress)
DGAM_DoMuleLocationAction();
else
NT_LocationAction(ControlData.getLocation());
Delay(500);
}
}
}
}
function NT_LocationAction(location)
{
var _randomChannel, _output, _control;
MW_CheckLocationLoops(location);
switch(location.id)
{
case 3: // Lobby Chat
if(JustJoined)
{
JustJoined = false;
if(MW_ArrayContainsUser(ChannelUsers))
_output = "ÿc2Chat actions enabled!";
else
_output = "ÿc1Chat actions disabled!";
for(var i = 0; i < 3; i++)
{
SetStatusText(_output);
Delay(500);
SetStatusText("");
Delay(500);
}
if(IgnoreWispers)
{
Say("/o igw");
Delay(500);
}
}
if(!ChatActionsDone && MW_ArrayContainsUser(ChannelUsers))
{
ChatActionsDone = true;
Delay(Random(WaitInChatBeforeActionsMin, WaitInChatBeforeActionsMax));
if(!JoinedChannel && (JoinRandomChannel || JoinChannelInChat != ""))
{
_randomChannel = NT_GetRandomString(Random(3,10));
SetStatusText("ÿc8Joining Channel ÿc;" + (JoinRandomChannel ? _randomChannel : JoinChannelInChat));
Delay(500);
Say("/join " + (JoinRandomChannel ? _randomChannel : JoinChannelInChat));
JoinedChannel = true;
if(PerformChannelLogin)
{
SetStatusText("ÿc8Channel Login...");
Say(".login");
Delay(1000);
}
}
}
case 1: // Lobby
if(location.id == 1 && JoinChatAfterLogin)
{
Delay(Random(WaitBeforeEnterChatMin, WaitBeforeEnterChatMax));
ControlData.click(ControlData.controls.lobby.button.enterChat);
break;
}
if(GetTickCount() > NextGameMake)
{
LastGameFailed = false;
switch(LastGameStatus)
{
case 0:
if(MW_ArrayContainsUser(JoinRandomGamesChars))
{
_control = ControlData.get(ControlData.controls.lobby.button.join);
if(_control && _control.pressed)
{
ControlData.click(ControlData.controls.lobby.button.create);
Delay(500);
}
ControlData.click(ControlData.controls.lobby.button.join);
}
else
{
_control = ControlData.get(ControlData.controls.lobby.button.create);
if(_control && _control.pressed)
{
ControlData.click(ControlData.controls.lobby.button.join);
Delay(500);
}
ControlData.click(ControlData.controls.lobby.button.create);
}
NextGameMake = GetTickCount() + CreateGameTimeout; // set our timeout
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
break;
case 1: // game failed, rollover to reset timer
InGameAt = GetTickCount();
LastGameFailed = true;
Delay(5000);
case 2:
NT_OutputGameLength();
LastGameStatus = 0;
NT_SetNextGameMake();
if(LastGameFailed)
{
SetStatusText("ÿc1Failed to join!");
NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, "ÿBE0000Game creation failed!", 0);
Delay(1000);
}
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
break;
}
}
else
{
if(JoinChannelInChat && !MadeAnnouncement && MW_ArrayContainsUser(ChannelUsers))
{
if(MW_AnnounceGame())
MadeAnnouncement = true;
}
MW_TimeoutDelay(NextGameMake - GetTickCount(), location, !MW_ArrayContainsUser(JoinRandomGamesChars));
}
break;
case 2: // Waiting In Line
if(GetTickCount() - LastGameMade > WaitInLineTimeout)
ControlData.click(ControlData.controls.lobby.inLine.button.cancel);
break;
case 4: // Create Game
if(!MW_ArrayContainsUser(JoinRandomGamesChars))
{
if(!ControlData.get(ControlData.controls.lobby.create.editBox.gameName))
{
ControlData.click(ControlData.controls.lobby.button.join);
Delay(500);
ControlData.click(ControlData.controls.lobby.button.create);
Delay(500);
}
_control = ControlData.get(ControlData.controls.lobby.create.button.useCharacterDifference);
if(_control)
{
if(CharacterDifference == 0 && _control.pressed || CharacterDifference >= 1 && CharacterDifference <= 99 && !_control.pressed)
{
ControlData.click(ControlData.controls.lobby.create.button.useCharacterDifference);
Delay(1000);
}
}
_control = ControlData.get(ControlData.controls.lobby.create.editBox.maxNumberOfPlayers);
if(_control)
{
if(PlayersPerGame >= 1 && PlayersPerGame <= 8 && _control.text != PlayersPerGame.toString())
{
ControlData.setText(ControlData.controls.lobby.create.editBox.maxNumberOfPlayers, PlayersPerGame.toString());
Delay(1000);
}
}
_control = ControlData.get(ControlData.controls.lobby.create.editBox.characterDifference);
if(_control)
{
if(_control.text != CharacterDifference.toString())
{
ControlData.setText(ControlData.controls.lobby.create.editBox.characterDifference, CharacterDifference.toString());
Delay(1000);
}
}
if(GameDescription)
{
ControlData.setText(ControlData.controls.lobby.create.editBox.gameDescription, GameDescription);
Delay(1000);
}
NT_SendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);
NT_LocationTimeout(5000, location);
LastGameMade = GetTickCount();
LastGameStatus = 1; // pending creation
}
break;
case 5: // Join Game
if(MW_ArrayContainsUser(JoinRandomGamesChars))
{
var _games, _game;
_games = ControlData.get(ControlData.controls.lobby.join.textBox.gameList).GetText();
_game = "";
if(_games)
{
for(var i = 0; i < _games.length; i++)
{
for(var j = 0; j < JoinGameKeywords.length; j++)
{
if(_games[i].toLowerCase().indexOf(JoinGameKeywords[j].toLowerCase()) > -1)
{
_game = _games[i];
i = _games.length;
break;
}
}
}
}
if(_game != "")
{
SetStatusText("ÿc8Joining Game: " + _game);
Delay(250);
ControlData.setText(ControlData.controls.lobby.join.editBox.gameName, _game);
Delay(1000);
ControlData.click(ControlData.controls.lobby.join.button.joinGame);
NT_LocationTimeout(5000, location);
LastGameMade = GetTickCount();
LastGameStatus = 1; // pending creation
}
else
Delay(2500);
ControlData.click(ControlData.controls.lobby.button.create);
Delay(500);
ControlData.click(ControlData.controls.lobby.button.join);
Delay(500);
}
break;
case 6: // Ladder
break;
case 7: // Channel List
break;
case 8: // Main Menu
if(ControlData.getCurrentRealmIndex() == me.gatewayid)
{
NT_OutputGameLength();
ControlData.click(ControlData.gameTypes[me.playtype]);
}
else
ControlData.click(ControlData.controls.mainMenu.button.gateway);
break;
case 9: // Login
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
Delay(LoginDelay);
ControlData.setText(ControlData.controls.login.editBox.accountName, me.account);
NT_SendEventToOOG(D2NT_MGR_LOGIN, location.name, 0);
NT_LocationTimeout(5000, location);
break;
case 10: // Login Error (this is a fatal error, so stop)
NT_SendEventToOOG(D2NT_MGR_RESTART, location.name, 10);
Delay(3500);
break;
case 11: // Unable To Connect
MW_TimeoutDelay(UnableToConnectRetry*60*1000, location);
ControlData.click(ControlData.controls.login.unableToConnect.button.ok);
break;
case 12: // Character Select
var _time, _control;
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
for(_time = 0 ; _time < CharacterScreenTimeout ; _time += 500)
{
_control = ControlData.get(ControlData.controls.characterSelect.textBox.characterInfo[me.charloc]);
if(_control && _control.GetText() != undefined)
break;
Delay(500);
}
if(_time < CharacterScreenTimeout)
{
Delay(CharacterSelectDelay);
ControlData.click(ControlData.controls.characterSelect.textBox.characters[me.charloc], 0, 0, 1);
ControlData.click(ControlData.controls.characterSelect.textBox.characterInfo[me.charloc], 0, 0, 1);
// reset last game made, so it doesnt make a game immediately
InGameAt = 0;
NT_SetNextGameMake();
}
else
{
ControlData.click(ControlData.controls.characterSelect.button.exit);
MW_TimeoutDelay(RealmDownRetry*60*1000, location);
}
break;
case 13: // Realm Down - Character Select screen
ControlData.click(ControlData.controls.characterSelect.button.exit);
MW_TimeoutDelay(RealmDownRetry*60*1000, location);
break;
case 14: // Character Select - Disconnected
MW_TimeoutDelay(DisconnectedRetry*60*1000, location);
ControlData.click(ControlData.controls.characterSelect.disconnected.button.ok);
break;
case 15: // New Character
break;
case 16: // Character Select - Please Wait popup
if(!NT_LocationTimeout(PleaseWaitTimeout, location))
ControlData.click(ControlData.controls.characterSelect.pleaseWait.button.cancel);
break;
case 17: // Lobby - Lost Connection - just click okay, since we're toast anyway
ControlData.click(ControlData.controls.lobby.lostConnection.button.ok);
break;
case 18: // D2 Splash
ControlData.click(ControlData.controls.d2Splash.textBox.copyright);
break;
case 19: // Login - Cdkey In Use
MW_TimeoutDelay(CdKeyInUseRetry*60*1000, location);
ControlData.click(ControlData.controls.login.cdkeyInUse.button.ok);
break;
case 20: // Single Player - Select Difficulty
ControlData.click(ControlData.singlePlayerDifficulties[me.diff]);
break;
case 21: // Main Menu - Connecting
if(!NT_LocationTimeout(ConnectingToBnetTimeout, location))
ControlData.click(ControlData.controls.mainMenu.connecting.button.cancel);
break;
case 22: // Login - Invalid Cdkey (classic or xpac)
NT_SendEventToOOG(D2NT_MGR_RESTART, location.name, 3600);
Delay(3500);
break;
case 23: // Character Select - Connecting
if(!NT_LocationTimeout(CharacterScreenTimeout, location))
ControlData.click(ControlData.controls.characterSelect.button.exit);
break;
case 24: // Server Down - not much to do but wait..
break;
case 25: // Lobby - Please Wait
if(!NT_LocationTimeout(PleaseWaitTimeout, location))
ControlData.click(ControlData.controls.lobby.pleaseWait.button.cancel);
break;
case 26: // Lobby - Game Name Exists
NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, "ÿBE0000Game already exists", 0);
SetStatusText("ÿc1Game already exists!");
InGameAt = 0;
LastGameStatus = 0;
NT_SetNextGameMake();
NT_LocationTimeout(15000, location);
break;
case 27: // Gateway Select
ControlData.clickRealmEntry(me.gatewayid);
ControlData.click(ControlData.controls.gateway.button.ok);
break;
case 28: // Lobby - Game Does Not Exist
InGameAt = Random(GameDoesNotExistDelayMin, GameDoesNotExistDelayMax);
LastGameStatus = 0;
NT_SetNextGameMake();
NT_LocationTimeout(GameDoesNotExistTimeout, location);
break;
}
}
function NT_SendEventToOOG(locationId, statusString, pendingTime)
{
return SendCopyData("D2NT Manager", null, (locationId<<16)|pendingTime, statusString);
}
function NT_SetNextGameMake()
{
LastGameMade = GetTickCount();
NextGameMake = LastGameMade + CreateGameThreshold + Random(0 - CreateGameThresholdRandom, CreateGameThresholdRandom) + InGameAt;
InGameAt = 0;
ChatActionsDone = false;
}
function NT_OutputGameLength()
{
var _duration;
if(InGameAt)
{
_duration = GetTickCount() - InGameAt;
if(_duration < GameMinLength)
InGameAt = GameMinLength - _duration;
else
InGameAt = 0;
}
}
function NT_LocationTimeout(time, location)
{
var _endtime = GetTickCount() + time;
while(ControlData.getLocation().id == location.id && _endtime > GetTickCount())
{
if(LocationLoops[1] > 1)
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " [" + MWC_ConvertTicksToTimeString(_endtime - GetTickCount()) + "] [" + LocationLoops[1] + "]", 0);
else
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " [" + MWC_ConvertTicksToTimeString(_endtime - GetTickCount()) + "]", 0);
Delay(1000);
}
return (ControlData.getLocation().id != location.id);
}
function MW_TimeoutDelay(time, location, showNextGameStatus)
{
var _gamename, _outputString, _timeString;
if(arguments.length < 3)
showNextGameStatus = false;
_endtime = GetTickCount() + time;
_gamename = me.gamename;
_timeString = "";
if(!_gamename)
{
_gamename = MW_ReadBackupFile(0);
if(_gamename)
SetStatusText("ÿc8Using File Backup...");
}
while(_endtime > GetTickCount())
{
_timeString = " [" + MWC_ConvertTicksToTimeString(_endtime - GetTickCount()) + "]";
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + _timeString , 0);
if(showNextGameStatus)
{
if(LastGameFailed && parseInt(_endtime-GetTickCount()) > CreateGameThreshold && parseInt((_endtime-GetTickCount())/1000) % 30 >= 0 && parseInt((_endtime-GetTickCount())/1000) % 30 <= 5)
{
_outputString = "ÿc1Last game failed!";
_timeString = "";
}
else if(parseInt((_endtime-GetTickCount())/1000) >= 0)
{
if(_gamename && MW_GetGameCounter(_gamename, false))
_outputString = "ÿc8Next game: " + MW_GetGameName(_gamename) + MW_GetGameCounter(_gamename, false);
else
_outputString = "ÿc8Game creation pending... ";
}
MWC_SetStatusText(_outputString, _timeString);
if(me.ingame)
_endtime = GetTickCount();
}
Delay(1000);
}
if(showNextGameStatus)
SetStatusText("ÿc8Creating game...");
return;
}
function NT_GetRandomString(length)
{
_retString = "";
_charSet = "0123456789abcdefghijklmnopqrstuvwxyz";
while(length--)
{
_retString += _charSet.charAt(Random(0, _charSet.length - 1));
Delay(1);
}
return _retString;
}
function MW_GetGameName(lastGameString)
{
if(!lastGameString)
return "";
else
return lastGameString.substr(0, lastGameString.lastIndexOf('-') + 1);
}
function MW_GetGameCounter(lastGameString, simple)
{
var _count, _countString;
if(!lastGameString)
return "-1";
else
{
_countString = lastGameString.slice(lastGameString.lastIndexOf('-') + 1);
if(_countString[0] == '0')
_countString = _countString.substr(1);
_count = parseInt(_countString) + 1;
if(_count == 100)
_count = 0;
if(!simple)
{
if(_count <= 9)
return '0' + _count;
}
return _count;
}
}
function MW_ArrayContainsUser(array)
{
for(var i = 0; i < array.length; i++)
{
if(me.account.toLowerCase() == array[i].toLowerCase() || me.charname.toLowerCase() == array[i].toLowerCase())
return true;
}
return false;
}
function MW_ReadBackupFile(type)
{
var _fhandle, _buffer, _time, _now, _retValue;
_fhandle = FileOpen("/Logs/Temporary Data/" + me.charname + ".channel", 2);
_retValue = "";
_now = new Date();
if(_fhandle && _now)
{
_buffer = _fhandle.ReadLine();
if(_buffer)
{
_time = parseInt(_buffer);
if(_now.getTime() - _time < UseFileBackupTimeMax*6E4)
{
_retValue = _fhandle.ReadLine();
if(type > 0)
_retValue = _fhandle.ReadLine();
}
}
_fhandle.Close();
}
else if(_fhandle)
_fhandle.Close();
return _retValue;
}
function MW_WriteBackupFile()
{
var _fhandle, _now;
if(UseFileBackupTimeMax == 0)
return false;
_fhandle = FileOpen("/Logs/Temporary Data/" + me.charname + ".channel", 1);
_now = new Date();
if(_fhandle && _now)
{
_fhandle.WriteLine(_now.getTime());
_fhandle.WriteLine(me.gamename);
_fhandle.WriteLine(me.gamepassword);
_fhandle.Close();
return true;
}
else if(_fhandle)
_fhandle.Close();
return false;
}
function MW_CheckLocationLoops(location)
{
if(!location)
return false;
if(!LocationLoops[0] || location.id != LocationLoops[0].id)
{
LocationLoops[0] = location;
LocationLoops[1] = 0;
}
else if(LocationLoops[0].id != 5)
{
LocationLoops[1]++;
if(LocationLoops[1] >= MaximumLocationLoops)
{
if(LocationLoops[1] < 1000)
NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, "ÿBE0000Location Loop Restart!;ÿc1Location Loops: " + LocationLoops[1] + "\nÿBE0000Location: " + LocationLoops[0].name + "\nÿBE0000Location ID: " + LocationLoops[0].id, 0);
LocationLoops[1] = 1000; // Make sure the location loop notification is only shown once
NT_SendEventToOOG(D2NT_MGR_RESTART, location.name, 0);
}
}
return true;
}
function MW_AnnounceGame()
{
var _gamePass, _gameName, _gameText, _delay;
_gameName = me.gamename;
if(!_gameName)
_gameName = MW_ReadBackupFile(0);
_gamePass = me.gamepassword;
if(!_gamePass)
_gamePass = MW_ReadBackupFile(1);
if(_gameName && !me.ingame)
{
_delay = (GameAnnouncementDelay > 5000) ? GameAnnouncementDelay : 5000;
_delay += (GameAnnouncementDelayRandom > 500) ? Random(0, GameAnnouncementDelayRandom) : 500;
_gameText = GameAnnouncement.replace("%password", ((_gamePass) ? _gamePass : "N/A"));
_gameText = _gameText.replace("%game", MW_GetGameName(_gameName));
_gameText = _gameText.replace("%counter", MW_GetGameCounter(_gameName, false));
_gameText = _gameText.replace("%time", parseInt((NextGameMake - GetTickCount() - _delay + ClickDelay + TextDelay) / 1000 + 5));
if(_gameText.indexOf("NaN") > -1)
return false;
if(parseInt((NextGameMake - GetTickCount() - _delay + ClickDelay + TextDelay) / 1000) > 3)
{
Delay(_delay);
return Say(_gameText);
}
}
return false;
}
|
|
|
05/27/2012, 23:14
|
#6525
|
elite*gold: 0
Join Date: May 2010
Posts: 212
Received Thanks: 40
|
Quote:
Originally Posted by Hirnverbrannt
wird trapsin noch überarbeitet? ist ja leider sehr buggy 
bzw wo kann ich einstellen das sie näher an die monster telet?.. die ist ja immer 10 meter von den monster entfernt.
und noch eine frage, wo ist hier der fehler? ich möchte das mein char den channel op babybaal joint, doch er joint nur DEU-x
Code:
/**
* This file was modified by [EMAIL=" "] [/EMAIL]
* Check the programming section for updates and further scripts
* Last Update: 11:25 05.11.2011
*/
//------------------------------------------------------------------------------
// Delays
//------------------------------------------------------------------------------
var GameMinLength = 120; // Time in seconds, minimum game length, 180 seconds default (1 game/3 minutes).
var UnableToConnectRetry = 5; // Time in minutes to retry connecting on connection fail (real value is +/- 1 min).
var RealmDownRetry = 15; // Time in minutes to retry connecting on a realm down (default is 300 minutes).
var DisconnectedRetry = 5; // Time in minutes to retry on a disconnection (usually ip ban related).
var CdKeyInUseRetry = 5; // Time in minutes to retry on a cdkey in use error message (set to 0 to stop).
var ConnectingToBnetTimeout = 20; // Time in seconds to wait for a login to Time out and click cancel and retry.
var CharacterScreenTimeout = 10; // Time in seconds to wait for character screen to appear.
var PleaseWaitTimeout = 10; // Time in seconds to wait for a please wait popup.
var CreateGameThreshold = 10; // Time in seconds to wait between making games.
var CreateGameThresholdRandom = 1; // Time in seconds to randomly add +/- to the game create time.
var CreateGameTimeout = 15; // Time in seconds to register a failed to create game.
var WaitInLineTimeout = 60; // Time in seconds to wait in lines for a create game (60 second default).
var CharacterSelectDelay = 1000; // Time in milliseconds to wait before selecting a character on the char screen.
var GameDoesNotExistDelayMin = 10; // How long to wait when a Game Does Not Exist occurs - minimum - default 10 minutes.
var GameDoesNotExistDelayMax = 15; // How long to wait when a Game Does Not Exist occurs - maximum - default 15 minutes.
var GameDoesNotExistTimeout = 30; // How long to wait for the dialog to disappear (default 30 seconds, don't change this).
// Control
var LoginDelay = 5000; // Time in milliseconds to wait before submitting login information.
var ClickDelay = 2000; // Wait X milliseconds before next action after a click event.
var TextDelay = 2500; // Wait X milliseconds before next action after inserting text into a textbox.
var ClickDelayRandom = 500; // Random amount of Time in milliseconds to add to a click.
var TextDelayRandom = 500; // Random amount of Time in milliseconds to add to a text set.
// Channel
var WaitBeforeEnterChatMin = 1000; // Min time in milliseconds to wait before entering chat.
var WaitBeforeEnterChatMax = 2000; // Max time in milliseconds to wait before entering chat.
var WaitInChatBeforeActionsMin = 2000; // Min time in milliseconds to wait before joining channel.
var WaitInChatBeforeActionsMax = 3000; // Max time in milliseconds to wait before joining channel.
var GameAnnouncementDelay = 5000; // Wait X milliseconds before posting the announcement message (don't set this too low!).
var GameAnnouncementDelayRandom = 500; // Random amount of time to add to a to the announcement delay.
var UseFileBackupTimeMax = 30; // Time in minutes that may pass since last file update - The backup File is updated at the beginning of every single game and is read everytime the name of your previous game is undefined (e.g. at restarts); Set to 0 to deactivate file backup.
//------------------------------------------------------------------------------
// Game settings
//------------------------------------------------------------------------------
var PlayersPerGame = 8; // Maximum number of players to be set when creating a game.
var CharacterDifference = 90; // Level difference to be set when creating games. Set to 0 not to use level restrictions.
var GameDescription = ""; // The description to be used for your game. Set to "" not to enter a game description.
var JoinRandomGamesChars = new Array("Goold");// Dynamic array that holds chars that are to join public games.
var JoinGameKeywords = new Array("dia", "baal"); // If your char is set to join public games, games will only be joined if the game name contains one of the given keywords.
//------------------------------------------------------------------------------
// Channel Settings
//------------------------------------------------------------------------------
var IgnoreWispers = true; // Set to true to ignore all incoming wispers from players that are not on your friendlist.
var JoinChatAfterLogin = true; // Join chat after login.
var JoinRandomChannel = false; // If this is true, will join a random channel, otherwise it will use the channel below..
var JoinChannelInChat = "Op Babybaal"; // Leave blank not to join a private channel.
var PerformChannelLogin = true; // Type ".login" once after joining the channel.
var ChannelUsers = new Array(); // Dynamic array that holds channel users.
// Add any char/account here that is supposed to perform chat actions/game announcements or join a private channel
ChannelUsers.push("YourCharNameGoesHere");
// Or
ChannelUsers.push("YourAccountNameGoesHere");
// The following key expressions will be replaced by their actual values: %game --> "gamename-" <> %counter --> number of the next game <> %time --> time in seconds till game creation <> %password --> game password
// Note that the announcement will start after the first run, so there usually won't be any anncouncement right after login - If the gamename is undefined, the bot will try to load the backup file to announce the upcoming game properly.
var GameAnnouncement = "Creating %game%counter//%password in about %time seconds.";
var ShowStatusOnStartup = true;
var JoinRetries = 5; // How many attempts before giving up the mule game?
var JoinRetryDelay = 55; // Seconds to wait between Retry Attempts.
var TimeBeforeMuleGame = 1; // Minutes to wait before creating the game.
var TimeAfterMule = 3; // Minutes to wait before logging back to bot account.
var WaitOnBlockedAccount = 2; // Minutes to wait if the mule account is currently being used by another char (this delay will be used up to 20 times).
//------------------------------------------------------------------------------
// Misc
//------------------------------------------------------------------------------
var MaximumLocationLoops = 5; // The maximum number of loops for a single location; if the window is does not respond and is caught in an infinite loop it will be restarted when the number of loops exceeds the one you specify here.
//---------------------------------------------------------------------------------------------------------------------------------------------------------
// DONT EDIT ANYTHING BELOW THIS!
//---------------------------------------------------------------------------------------------------------------------------------------------------------
// AutoMule Variables and Stuff
const DGDebug = false;
const AUTOMULE_READY = 1;
const AUTOMULE_FULL = 0;
const AUTOMULE_NOMULES = -1;
function AutomuleData()
{
this.InProgress = false;
this.PreventRecover = false;
this.IsWaiting = false;
this.State = "notmuling";
this.CurrentAccount = 0;
this.MuleIndex = 0;
this.IsReadyState = AUTOMULE_READY;
// Account creation variables
this.CreateAccount = false;
this.CharCreateNumber = -1;
this.RegMail = "";
this.MuleFull = false;
this.AccName;
this.AccPw;
this.AccPrefix;
this.AccSuffix = new Array();
this.NewAccPw = new Array();
this.UserNumbers;
this.IsLadder;
this.IsHC;
this.IsClassic;
this.RandomNameLength;
this.GameName;
this.GamePassword;
this.Mules = new Array();
this.MuleAccs;
this.MulePws;
this.NipFiles = new Array();
this.CharLoc;
this.MuleIsFullThreshold;
this.JoinBug;
this.NewCharBug = 0;
this.FullAuto = false;
}
var Automule = new AutomuleData();
Include("libs/controlInfo.ntl");
Include("libs/common/NTCommon.ntl");
Include("NTBot/mule_configs/NTConfig_AutoMule.ntl");
NT_LoadMuleConfig();
Include("libs/common/DGAutoMule.ntl");
// D2NT Manager Command
const D2NT_MGR_LOADING = 1;
const D2NT_MGR_READY = 2;
const D2NT_MGR_LOGIN = 3;
const D2NT_MGR_CREATE_GAME = 4;
const D2NT_MGR_INGAME = 5;
const D2NT_MGR_RESTART = 6;
const D2NT_MGR_CHICKEN = 7;
const D2NT_MGR_PRINT_STATUS = 8;
const D2NT_MGR_PRINT_LOG = 9;
var LastGameMade = GetTickCount();
var LastGameStatus = 0;
var NextGameMake = 0;
var InGameAt = 0;
var LocationLoops = new Array(2);
var ChatActionsDone = false;
var LastGameFailed = false;
var JoinedChannel = false;
var JustJoined = true;
var MadeAnnouncement = false;
// This is for recovering purpose, delete mulestate file is you get stuck
DGAM_ReadMuleStats();
MWAM_ReleaseUsedAccounts();
MWAM_InitializedMuleLoads(false);
var ControlData = new controlInfo();
function NTMain()
{
var _ingame, _scriptPath;
Delay(1000);
_ingame = false;
ConnectingToBnetTimeout *= 1000;
GameMinLength *= 1000;
CharacterScreenTimeout *= 1000;
PleaseWaitTimeout *= 1000;
CreateGameThreshold *= 1000;
CreateGameThresholdRandom *= 1000;
CreateGameTimeout *= 1000;
WaitInLineTimeout *= 1000;
GameDoesNotExistDelayMin *= 1000*60;
GameDoesNotExistDelayMax *= 1000*60;
GameDoesNotExistTimeout *= 1000;
ControlData.ClickDelay = ClickDelay;
ControlData.TextDelay = TextDelay;
ControlData.ClickDelayRandom = ClickDelayRandom;
ControlData.TextDelayRandom = TextDelayRandom;
RegisterEvent(EVENT_SCRIPTMSG, DGAM_MuleMsgEvents);
while(true)
{
if(me.ingame)
{
if(!InGameAt)
InGameAt = GetTickCount();
if(!_ingame)
{
if(Automule.InProgress)
{
if(DGDebug)
NTC_SendLogToOOG(NTC_LOG_COMMON, "[Debug] Joined Mule Game");
switch(Automule.State)
{
case "notmuling": // Done or not yet started
// No... we really are not supposed to be here
Automule.InProgress = false;
ExitGame();
NTC_SendLogToOOG(NTC_LOG_COMMON, "AutoMule Error, try again.");
SetStatusText("ÿc1AutoMule Error... (Wait 60s)");
Delay(60000);
break;
case "mulestart": // Still on Bot Account
_scriptPath = "NTBot/bots/NTPermGameandMule.ntj";
break;
case "mule": //Muleing
case "mulefull": // Mule Full
case "done": // Next Account
case "recover": // Recovering
_scriptPath = "NTBot/bots/NTPickStuff.ntj";
break;
default:
_scriptPath = "NTBot/NTPermGameandMule.ntj";
break;
}
if(DGDebug)
NTC_SendLogToOOG(NTC_LOG_COMMON, "Debug: Load " + _scriptPath);
RunGC();
if(Load(_scriptPath))
{
_ingame = true;
Automule.JoinBugCount = 0;
MadeAnnouncement = false;
LocationLoops[1] = 0;
MW_WriteBackupFile();
if(me.playtype > 0)
NT_SendEventToOOG(D2NT_MGR_INGAME, "Currently in Mule Game", 0);
else
NT_SendEventToOOG(D2NT_MGR_INGAME, "Oops, that's not gonna work honey.", 0);
LastGameStatus = 2; // in game successful
}
}
else
{
RunGC(); // run garbage collector between each game
if(Load("NTBot/MWBotGame.ntj"))
{
_ingame = true;
MadeAnnouncement = false;
LocationLoops[1] = 0;
MW_WriteBackupFile();
if(me.playtype > 0)
NT_SendEventToOOG(D2NT_MGR_INGAME, "In Game [IP:" + me.gameserverip.split(".")[3] + "]", 0);
else
NT_SendEventToOOG(D2NT_MGR_INGAME, "In Game", 0);
LastGameStatus = 2; // in game successful
}
}
}
Delay(1000);
}
else
{
if(Automule.IsWaiting)
Delay(1000);
else
{
if(_ingame)
{
_ingame = false;
NT_SendEventToOOG(D2NT_MGR_READY, "", 0);
Delay(4000);
}
if(Automule.InProgress)
DGAM_DoMuleLocationAction();
else
NT_LocationAction(ControlData.getLocation());
Delay(500);
}
}
}
}
function NT_LocationAction(location)
{
var _randomChannel, _output, _control;
MW_CheckLocationLoops(location);
switch(location.id)
{
case 3: // Lobby Chat
if(JustJoined)
{
JustJoined = false;
if(MW_ArrayContainsUser(ChannelUsers))
_output = "ÿc2Chat actions enabled!";
else
_output = "ÿc1Chat actions disabled!";
for(var i = 0; i < 3; i++)
{
SetStatusText(_output);
Delay(500);
SetStatusText("");
Delay(500);
}
if(IgnoreWispers)
{
Say("/o igw");
Delay(500);
}
}
if(!ChatActionsDone && MW_ArrayContainsUser(ChannelUsers))
{
ChatActionsDone = true;
Delay(Random(WaitInChatBeforeActionsMin, WaitInChatBeforeActionsMax));
if(!JoinedChannel && (JoinRandomChannel || JoinChannelInChat != ""))
{
_randomChannel = NT_GetRandomString(Random(3,10));
SetStatusText("ÿc8Joining Channel ÿc;" + (JoinRandomChannel ? _randomChannel : JoinChannelInChat));
Delay(500);
Say("/join " + (JoinRandomChannel ? _randomChannel : JoinChannelInChat));
JoinedChannel = true;
if(PerformChannelLogin)
{
SetStatusText("ÿc8Channel Login...");
Say(".login");
Delay(1000);
}
}
}
case 1: // Lobby
if(location.id == 1 && JoinChatAfterLogin)
{
Delay(Random(WaitBeforeEnterChatMin, WaitBeforeEnterChatMax));
ControlData.click(ControlData.controls.lobby.button.enterChat);
break;
}
if(GetTickCount() > NextGameMake)
{
LastGameFailed = false;
switch(LastGameStatus)
{
case 0:
if(MW_ArrayContainsUser(JoinRandomGamesChars))
{
_control = ControlData.get(ControlData.controls.lobby.button.join);
if(_control && _control.pressed)
{
ControlData.click(ControlData.controls.lobby.button.create);
Delay(500);
}
ControlData.click(ControlData.controls.lobby.button.join);
}
else
{
_control = ControlData.get(ControlData.controls.lobby.button.create);
if(_control && _control.pressed)
{
ControlData.click(ControlData.controls.lobby.button.join);
Delay(500);
}
ControlData.click(ControlData.controls.lobby.button.create);
}
NextGameMake = GetTickCount() + CreateGameTimeout; // set our timeout
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
break;
case 1: // game failed, rollover to reset timer
InGameAt = GetTickCount();
LastGameFailed = true;
Delay(5000);
case 2:
NT_OutputGameLength();
LastGameStatus = 0;
NT_SetNextGameMake();
if(LastGameFailed)
{
SetStatusText("ÿc1Failed to join!");
NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, "ÿBE0000Game creation failed!", 0);
Delay(1000);
}
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
break;
}
}
else
{
if(JoinChannelInChat && !MadeAnnouncement && MW_ArrayContainsUser(ChannelUsers))
{
if(MW_AnnounceGame())
MadeAnnouncement = true;
}
MW_TimeoutDelay(NextGameMake - GetTickCount(), location, !MW_ArrayContainsUser(JoinRandomGamesChars));
}
break;
case 2: // Waiting In Line
if(GetTickCount() - LastGameMade > WaitInLineTimeout)
ControlData.click(ControlData.controls.lobby.inLine.button.cancel);
break;
case 4: // Create Game
if(!MW_ArrayContainsUser(JoinRandomGamesChars))
{
if(!ControlData.get(ControlData.controls.lobby.create.editBox.gameName))
{
ControlData.click(ControlData.controls.lobby.button.join);
Delay(500);
ControlData.click(ControlData.controls.lobby.button.create);
Delay(500);
}
_control = ControlData.get(ControlData.controls.lobby.create.button.useCharacterDifference);
if(_control)
{
if(CharacterDifference == 0 && _control.pressed || CharacterDifference >= 1 && CharacterDifference <= 99 && !_control.pressed)
{
ControlData.click(ControlData.controls.lobby.create.button.useCharacterDifference);
Delay(1000);
}
}
_control = ControlData.get(ControlData.controls.lobby.create.editBox.maxNumberOfPlayers);
if(_control)
{
if(PlayersPerGame >= 1 && PlayersPerGame <= 8 && _control.text != PlayersPerGame.toString())
{
ControlData.setText(ControlData.controls.lobby.create.editBox.maxNumberOfPlayers, PlayersPerGame.toString());
Delay(1000);
}
}
_control = ControlData.get(ControlData.controls.lobby.create.editBox.characterDifference);
if(_control)
{
if(_control.text != CharacterDifference.toString())
{
ControlData.setText(ControlData.controls.lobby.create.editBox.characterDifference, CharacterDifference.toString());
Delay(1000);
}
}
if(GameDescription)
{
ControlData.setText(ControlData.controls.lobby.create.editBox.gameDescription, GameDescription);
Delay(1000);
}
NT_SendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);
NT_LocationTimeout(5000, location);
LastGameMade = GetTickCount();
LastGameStatus = 1; // pending creation
}
break;
case 5: // Join Game
if(MW_ArrayContainsUser(JoinRandomGamesChars))
{
var _games, _game;
_games = ControlData.get(ControlData.controls.lobby.join.textBox.gameList).GetText();
_game = "";
if(_games)
{
for(var i = 0; i < _games.length; i++)
{
for(var j = 0; j < JoinGameKeywords.length; j++)
{
if(_games[i].toLowerCase().indexOf(JoinGameKeywords[j].toLowerCase()) > -1)
{
_game = _games[i];
i = _games.length;
break;
}
}
}
}
if(_game != "")
{
SetStatusText("ÿc8Joining Game: " + _game);
Delay(250);
ControlData.setText(ControlData.controls.lobby.join.editBox.gameName, _game);
Delay(1000);
ControlData.click(ControlData.controls.lobby.join.button.joinGame);
NT_LocationTimeout(5000, location);
LastGameMade = GetTickCount();
LastGameStatus = 1; // pending creation
}
else
Delay(2500);
ControlData.click(ControlData.controls.lobby.button.create);
Delay(500);
ControlData.click(ControlData.controls.lobby.button.join);
Delay(500);
}
break;
case 6: // Ladder
break;
case 7: // Channel List
break;
case 8: // Main Menu
if(ControlData.getCurrentRealmIndex() == me.gatewayid)
{
NT_OutputGameLength();
ControlData.click(ControlData.gameTypes[me.playtype]);
}
else
ControlData.click(ControlData.controls.mainMenu.button.gateway);
break;
case 9: // Login
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
Delay(LoginDelay);
ControlData.setText(ControlData.controls.login.editBox.accountName, me.account);
NT_SendEventToOOG(D2NT_MGR_LOGIN, location.name, 0);
NT_LocationTimeout(5000, location);
break;
case 10: // Login Error (this is a fatal error, so stop)
NT_SendEventToOOG(D2NT_MGR_RESTART, location.name, 10);
Delay(3500);
break;
case 11: // Unable To Connect
MW_TimeoutDelay(UnableToConnectRetry*60*1000, location);
ControlData.click(ControlData.controls.login.unableToConnect.button.ok);
break;
case 12: // Character Select
var _time, _control;
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
for(_time = 0 ; _time < CharacterScreenTimeout ; _time += 500)
{
_control = ControlData.get(ControlData.controls.characterSelect.textBox.characterInfo[me.charloc]);
if(_control && _control.GetText() != undefined)
break;
Delay(500);
}
if(_time < CharacterScreenTimeout)
{
Delay(CharacterSelectDelay);
ControlData.click(ControlData.controls.characterSelect.textBox.characters[me.charloc], 0, 0, 1);
ControlData.click(ControlData.controls.characterSelect.textBox.characterInfo[me.charloc], 0, 0, 1);
// reset last game made, so it doesnt make a game immediately
InGameAt = 0;
NT_SetNextGameMake();
}
else
{
ControlData.click(ControlData.controls.characterSelect.button.exit);
MW_TimeoutDelay(RealmDownRetry*60*1000, location);
}
break;
case 13: // Realm Down - Character Select screen
ControlData.click(ControlData.controls.characterSelect.button.exit);
MW_TimeoutDelay(RealmDownRetry*60*1000, location);
break;
case 14: // Character Select - Disconnected
MW_TimeoutDelay(DisconnectedRetry*60*1000, location);
ControlData.click(ControlData.controls.characterSelect.disconnected.button.ok);
break;
case 15: // New Character
break;
case 16: // Character Select - Please Wait popup
if(!NT_LocationTimeout(PleaseWaitTimeout, location))
ControlData.click(ControlData.controls.characterSelect.pleaseWait.button.cancel);
break;
case 17: // Lobby - Lost Connection - just click okay, since we're toast anyway
ControlData.click(ControlData.controls.lobby.lostConnection.button.ok);
break;
case 18: // D2 Splash
ControlData.click(ControlData.controls.d2Splash.textBox.copyright);
break;
case 19: // Login - Cdkey In Use
MW_TimeoutDelay(CdKeyInUseRetry*60*1000, location);
ControlData.click(ControlData.controls.login.cdkeyInUse.button.ok);
break;
case 20: // Single Player - Select Difficulty
ControlData.click(ControlData.singlePlayerDifficulties[me.diff]);
break;
case 21: // Main Menu - Connecting
if(!NT_LocationTimeout(ConnectingToBnetTimeout, location))
ControlData.click(ControlData.controls.mainMenu.connecting.button.cancel);
break;
case 22: // Login - Invalid Cdkey (classic or xpac)
NT_SendEventToOOG(D2NT_MGR_RESTART, location.name, 3600);
Delay(3500);
break;
case 23: // Character Select - Connecting
if(!NT_LocationTimeout(CharacterScreenTimeout, location))
ControlData.click(ControlData.controls.characterSelect.button.exit);
break;
case 24: // Server Down - not much to do but wait..
break;
case 25: // Lobby - Please Wait
if(!NT_LocationTimeout(PleaseWaitTimeout, location))
ControlData.click(ControlData.controls.lobby.pleaseWait.button.cancel);
break;
case 26: // Lobby - Game Name Exists
NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, "ÿBE0000Game already exists", 0);
SetStatusText("ÿc1Game already exists!");
InGameAt = 0;
LastGameStatus = 0;
NT_SetNextGameMake();
NT_LocationTimeout(15000, location);
break;
case 27: // Gateway Select
ControlData.clickRealmEntry(me.gatewayid);
ControlData.click(ControlData.controls.gateway.button.ok);
break;
case 28: // Lobby - Game Does Not Exist
InGameAt = Random(GameDoesNotExistDelayMin, GameDoesNotExistDelayMax);
LastGameStatus = 0;
NT_SetNextGameMake();
NT_LocationTimeout(GameDoesNotExistTimeout, location);
break;
}
}
function NT_SendEventToOOG(locationId, statusString, pendingTime)
{
return SendCopyData("D2NT Manager", null, (locationId<<16)|pendingTime, statusString);
}
function NT_SetNextGameMake()
{
LastGameMade = GetTickCount();
NextGameMake = LastGameMade + CreateGameThreshold + Random(0 - CreateGameThresholdRandom, CreateGameThresholdRandom) + InGameAt;
InGameAt = 0;
ChatActionsDone = false;
}
function NT_OutputGameLength()
{
var _duration;
if(InGameAt)
{
_duration = GetTickCount() - InGameAt;
if(_duration < GameMinLength)
InGameAt = GameMinLength - _duration;
else
InGameAt = 0;
}
}
function NT_LocationTimeout(time, location)
{
var _endtime = GetTickCount() + time;
while(ControlData.getLocation().id == location.id && _endtime > GetTickCount())
{
if(LocationLoops[1] > 1)
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " [" + MWC_ConvertTicksToTimeString(_endtime - GetTickCount()) + "] [" + LocationLoops[1] + "]", 0);
else
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " [" + MWC_ConvertTicksToTimeString(_endtime - GetTickCount()) + "]", 0);
Delay(1000);
}
return (ControlData.getLocation().id != location.id);
}
function MW_TimeoutDelay(time, location, showNextGameStatus)
{
var _gamename, _outputString, _timeString;
if(arguments.length < 3)
showNextGameStatus = false;
_endtime = GetTickCount() + time;
_gamename = me.gamename;
_timeString = "";
if(!_gamename)
{
_gamename = MW_ReadBackupFile(0);
if(_gamename)
SetStatusText("ÿc8Using File Backup...");
}
while(_endtime > GetTickCount())
{
_timeString = " [" + MWC_ConvertTicksToTimeString(_endtime - GetTickCount()) + "]";
NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + _timeString , 0);
if(showNextGameStatus)
{
if(LastGameFailed && parseInt(_endtime-GetTickCount()) > CreateGameThreshold && parseInt((_endtime-GetTickCount())/1000) % 30 >= 0 && parseInt((_endtime-GetTickCount())/1000) % 30 <= 5)
{
_outputString = "ÿc1Last game failed!";
_timeString = "";
}
else if(parseInt((_endtime-GetTickCount())/1000) >= 0)
{
if(_gamename && MW_GetGameCounter(_gamename, false))
_outputString = "ÿc8Next game: " + MW_GetGameName(_gamename) + MW_GetGameCounter(_gamename, false);
else
_outputString = "ÿc8Game creation pending... ";
}
MWC_SetStatusText(_outputString, _timeString);
if(me.ingame)
_endtime = GetTickCount();
}
Delay(1000);
}
if(showNextGameStatus)
SetStatusText("ÿc8Creating game...");
return;
}
function NT_GetRandomString(length)
{
_retString = "";
_charSet = "0123456789abcdefghijklmnopqrstuvwxyz";
while(length--)
{
_retString += _charSet.charAt(Random(0, _charSet.length - 1));
Delay(1);
}
return _retString;
}
function MW_GetGameName(lastGameString)
{
if(!lastGameString)
return "";
else
return lastGameString.substr(0, lastGameString.lastIndexOf('-') + 1);
}
function MW_GetGameCounter(lastGameString, simple)
{
var _count, _countString;
if(!lastGameString)
return "-1";
else
{
_countString = lastGameString.slice(lastGameString.lastIndexOf('-') + 1);
if(_countString[0] == '0')
_countString = _countString.substr(1);
_count = parseInt(_countString) + 1;
if(_count == 100)
_count = 0;
if(!simple)
{
if(_count <= 9)
return '0' + _count;
}
return _count;
}
}
function MW_ArrayContainsUser(array)
{
for(var i = 0; i < array.length; i++)
{
if(me.account.toLowerCase() == array[i].toLowerCase() || me.charname.toLowerCase() == array[i].toLowerCase())
return true;
}
return false;
}
function MW_ReadBackupFile(type)
{
var _fhandle, _buffer, _time, _now, _retValue;
_fhandle = FileOpen("/Logs/Temporary Data/" + me.charname + ".channel", 2);
_retValue = "";
_now = new Date();
if(_fhandle && _now)
{
_buffer = _fhandle.ReadLine();
if(_buffer)
{
_time = parseInt(_buffer);
if(_now.getTime() - _time < UseFileBackupTimeMax*6E4)
{
_retValue = _fhandle.ReadLine();
if(type > 0)
_retValue = _fhandle.ReadLine();
}
}
_fhandle.Close();
}
else if(_fhandle)
_fhandle.Close();
return _retValue;
}
function MW_WriteBackupFile()
{
var _fhandle, _now;
if(UseFileBackupTimeMax == 0)
return false;
_fhandle = FileOpen("/Logs/Temporary Data/" + me.charname + ".channel", 1);
_now = new Date();
if(_fhandle && _now)
{
_fhandle.WriteLine(_now.getTime());
_fhandle.WriteLine(me.gamename);
_fhandle.WriteLine(me.gamepassword);
_fhandle.Close();
return true;
}
else if(_fhandle)
_fhandle.Close();
return false;
}
function MW_CheckLocationLoops(location)
{
if(!location)
return false;
if(!LocationLoops[0] || location.id != LocationLoops[0].id)
{
LocationLoops[0] = location;
LocationLoops[1] = 0;
}
else if(LocationLoops[0].id != 5)
{
LocationLoops[1]++;
if(LocationLoops[1] >= MaximumLocationLoops)
{
if(LocationLoops[1] < 1000)
NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, "ÿBE0000Location Loop Restart!;ÿc1Location Loops: " + LocationLoops[1] + "\nÿBE0000Location: " + LocationLoops[0].name + "\nÿBE0000Location ID: " + LocationLoops[0].id, 0);
LocationLoops[1] = 1000; // Make sure the location loop notification is only shown once
NT_SendEventToOOG(D2NT_MGR_RESTART, location.name, 0);
}
}
return true;
}
function MW_AnnounceGame()
{
var _gamePass, _gameName, _gameText, _delay;
_gameName = me.gamename;
if(!_gameName)
_gameName = MW_ReadBackupFile(0);
_gamePass = me.gamepassword;
if(!_gamePass)
_gamePass = MW_ReadBackupFile(1);
if(_gameName && !me.ingame)
{
_delay = (GameAnnouncementDelay > 5000) ? GameAnnouncementDelay : 5000;
_delay += (GameAnnouncementDelayRandom > 500) ? Random(0, GameAnnouncementDelayRandom) : 500;
_gameText = GameAnnouncement.replace("%password", ((_gamePass) ? _gamePass : "N/A"));
_gameText = _gameText.replace("%game", MW_GetGameName(_gameName));
_gameText = _gameText.replace("%counter", MW_GetGameCounter(_gameName, false));
_gameText = _gameText.replace("%time", parseInt((NextGameMake - GetTickCount() - _delay + ClickDelay + TextDelay) / 1000 + 5));
if(_gameText.indexOf("NaN") > -1)
return false;
if(parseInt((NextGameMake - GetTickCount() - _delay + ClickDelay + TextDelay) / 1000) > 3)
{
Delay(_delay);
return Say(_gameText);
}
}
return false;
}
|
Code:
ChannelUsers.push("YourCharNameGoesHere");
Da steht auf Neudeutsch, ("IhrCharakterNameKommtHierRein");
Dann joint er auch den channel.
Gross-Kleinschreibung beachten.
Also Muddy macht hier Nichts mehr, nur ab und zu mal auf Sauberkeit kontrollieren. Und ich spiele keine Trapse.
|
|
|
 |
|
Similar Threads
|
[Release] D2NT 3.1 1.13c
07/17/2016 - Diablo 2 - 91 Replies
hi,
hab eben den d2nt3.1 gefunden. ein neues baba script is dabei.
release thread eon
D2NT3.1
|
[Realease] Muddy's Waypoint Catcher
08/21/2013 - Diablo 2 Programming - 46 Replies
Moin zusammen,
hier mal die erste Release Version eines kleinen Scripts genannt Waypoint Catcher. Das ganze ist jetzt nichtmal 24h alt, dementsprechend sind vermutlich noch einige Bugs vorhanden. Hinweise dazu nehme ich gerne entgegen. ;)
Features:
- Suchen sämtlicher Wegpunkte mit Ausnahme, wobei in Akt ein durch Probleme im Jail Bereich nach dem Wegpunkt Outer Cloister abgebrochen wird
- Wahlweise auch mit TP an jedem gefundenen Wp, sodass man damit auch anderen (nicht-Bots) die...
|
[D2NT] Long Dia Release
05/10/2011 - Diablo 2 Programming - 28 Replies
Ein kleines Script für diablo, es startet beim eingang macht ein tp cleart den weg zum star macht am star noch ein tp dann läufts wie das normale nur cleart es schöner :)
hoffe euch gefällts ich habs noch nicht wirklich getestet (2-3 runs) bugs können gerne hier gepostet werden verbesserungs vorschläge auch :D
installation:
1.)Script in den Bot ordner kopieren
2.)Script im editor oder vergleichbaren öffnen
3.) Msg´s anpassen (ist nicht schwer)
4.) in der char config die zeile...
|
D2NT 3.0 Pickit release
10/22/2010 - Diablo 2 - 77 Replies
edit
|
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
|
All times are GMT +1. The time now is 13:28.
|
|