Register for your free account! | Forgot your password?

You last visited: Today at 13:27

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Release] Muddy's D2NT

Discussion on [Release] Muddy's D2NT within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old 05/24/2012, 17:39   #6511
 
elite*gold: 0
Join Date: Jun 2010
Posts: 25
Received Thanks: 8
Quote:
Originally Posted by Playboy91 View Post
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...
shytim is offline  
Old 05/24/2012, 18:04   #6512
 
elite*gold: 0
Join Date: Sep 2010
Posts: 38
Received Thanks: 16
Quote:
Originally Posted by shytim View Post
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?
Bastian74 is offline  
Old 05/24/2012, 18:07   #6513
 
elite*gold: 0
Join Date: May 2011
Posts: 44
Received Thanks: 1
Quote:
Originally Posted by shytim View Post
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
Playboy91 is offline  
Old 05/24/2012, 18:16   #6514
 
elite*gold: 0
Join Date: Jun 2010
Posts: 25
Received Thanks: 8
Quote:
Originally Posted by Playboy91 View Post
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 ?
shytim is offline  
Old 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
luplup is offline  
Old 05/24/2012, 20:01   #6516
 
elite*gold: 0
Join Date: May 2011
Posts: 44
Received Thanks: 1
Quote:
Originally Posted by shytim View Post
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^^
Playboy91 is offline  
Old 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.
shytim is offline  
Thanks
1 User
Old 05/25/2012, 05:46   #6518
 
mirkoregge's Avatar
 
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?
mirkoregge is offline  
Old 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
CoD-Rafi is offline  
Old 05/25/2012, 21:18   #6520
 
elite*gold: 0
Join Date: Jun 2010
Posts: 25
Received Thanks: 8
Quote:
Originally Posted by CoD-Rafi View Post
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.
shytim is offline  
Old 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?
VegaFFM is offline  
Old 05/27/2012, 00:53   #6522
 
elite*gold: 0
Join Date: Jun 2010
Posts: 25
Received Thanks: 8
Quote:
Originally Posted by VegaFFM View Post
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...
shytim is offline  
Thanks
1 User
Old 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
vergil-rock is offline  
Old 05/27/2012, 21:20   #6524
 
Hirnverbrannt's Avatar
 
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;
}
Hirnverbrannt is online now  
Old 05/27/2012, 23:14   #6525
 
elite*gold: 0
Join Date: May 2010
Posts: 212
Received Thanks: 40
Quote:
Originally Posted by Hirnverbrannt View Post
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.
fred9x9 is offline  
Thanks
1 User
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.