Author Topic: How do I get the Bot to actually say when it has created the game before (More)  (Read 625 times)

Offline Tokey

  • Newbie
  • *
  • Join Date: Aug 2010
  • Posts: 1
  • Reputation 0
  • I <3 PureKaoz.com
    • View Profile
Thanks for the great article on how to get the bot to talk in a channel at all! However now I'm having trouble getting the bot to say when the game is actually created before it creates it. I'm not sure where to add the " Say() " Command, I've tried several places and different methods. like ...

if(time <= 2)
{
Say("Creating %game now");
}

etc.. etc..

Edit: This is what the code looks like so far.

Code: [Select]
/****************************************************************************
*               This file was modified by Muddy_Waters@epvp.de
*         Re-Modified by http://PureKaoz.com                  *                                                                                                   *
*                        Last Update: 05/19/2010                            *
****************************************************************************/
var gameMinLength      = 120000;   // time in milliseconds, 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      = 300;      // 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   = 20000;   // time in milliseconds to wait for a login to time out and click cancel and retry
var characterScreenTimeout   = 10000;   // time in milliseconds to wait for character screen to appear
var pleaseWaitTimeout      = 10000;   // time in milliseconds to wait for a please wait popup
var createGameThreshold      = 15000;      // time in milliseconds to wait between making games
var createGameThresholdRandom   = 5000;      // time in milliseconds to randomly add +/- to the game create time
var createGameTimeout      = 15000;   // time in milliseconds to register a failed to create game
var waitInLineTimeout      = 60000;   // time in milliseconds 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 loginDelay         = 1000;      // time in milliseconds to wait before submitting login information
var clickDelay         = 1000;      // wait X milliseconds before next action after a click event
var textDelay         = 1000;      // wait X milliseconds before next action after inserting text into a textbox
var clickDelayRandom      = 500;      // random amount of time to add to a click
var textDelayRandom      = 500;      // random amount of time to add to a text set
var gameDoesNotExistDelayMin   = 600000;   // how long to wait when a Game Does Not Exist occurs - minimum - default 10 minutes
var gameDoesNotExistDelayMax   = 900000;   // how long to wait when a Game Does Not Exist occurs - maximum - default 15 minutes
var gameDoesNotExistTimeout   = 30000;   // how long to wait for the dialog to disappear (default 30 seconds, don't change this)
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 FsA.Runs";      // leave blank not to join a private channel
var channelLogin         = false;   // 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("TakenOutForForum");
channelUsers.push("TakenOutForForum");
//----------------------------------------------------------------------------------------------------------------------------------------------------------
//These key expressions are replaced that way: %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 won't be any anncouncement right after login
var gameAnnouncement      = "The next game will be in %time seconds. Game name will be named: %game%counter."; // leave blank not to post a channel announcement
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 myOwnText = "Creating %game now!";
//----------------------------------------------------------------------------------------------------------------------------------------------------------
var waitBeforeEnterChatMin   = 1000;      // min how long to wait before entering chat
var waitBeforeEnterChatMax   = 2000;      // max how long to wait before entering chat
var waitInChatBeforeActionsMin   = 2000;      // min how long to wait before joining channel
var waitInChatBeforeActionsMax   = 3000;      // max how long to wait before joining channel

// DONT EDIT ANYTHING BELOW THIS

// 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 chatActionsDone = false;
var lastGameFailed = false;
var   joinedChannel = false;
var justJoined = true;

Include("libs/controlInfo.ntl");

var controlData = new controlInfo();

function NTMain()
{
   Delay(1000);

   var _ingame = false;

   controlData.clickDelay = clickDelay;
   controlData.textDelay = textDelay;
   controlData.clickDelayRandom = clickDelayRandom;
   controlData.textDelayRandom = textDelayRandom;

   while(1)
   {
      if(me.ingame)
      {
         if(!inGameAt)
            inGameAt = GetTickCount();

         if(!_ingame)
         {
            RunGC(); // run garbage collector between each game

            if(Load("NTBot/NTBotGame.ntj"))
            {
               _ingame = true;

               if(me.playtype > 0)
                  sendEventToOOG(D2NT_MGR_INGAME, "In Game [IP:" + me.gameserverip.split(".")[3] + "]", 0);
               else
                  sendEventToOOG(D2NT_MGR_INGAME, "In Game", 0);
               lastGameStatus = 2; // in game successful
            }
         }

         Delay(1000);
      }
      else
      {
         if(_ingame)
         {
            _ingame = false;

            sendEventToOOG(D2NT_MGR_READY, "", 0);
         }

         locationAction(controlData.getLocation());

         Delay(500);
      }
   }
}

function locationAction(location)
{
   switch(location.id)
   {
   case 3: // Lobby Chat
      if(justJoined)
      {
         justJoined = false;
         if(isChannelUser(me.account, me.charname))
         {
            for(var i = 0; i < 3; i++)
            {
               SetStatusText("?c2Chat actions enabled!");   
               Delay(750);
               SetStatusText("");   
               Delay(750);
            }
         }
         else
         {
            for(var i = 0; i < 3; i++)
            {
               SetStatusText("?c1Chat actions disabled!");   
               Delay(750);
               SetStatusText("");   
               Delay(750);
            }
         }
      }
      if(!chatActionsDone && isChannelUser(me.account, me.charname))
      {
         chatActionsDone = true;
         Delay(Random(waitInChatBeforeActionsMin, waitInChatBeforeActionsMax));
         if(!joinedChannel && (joinRandomChannel || joinChannelInChat != ""))
         {
            var rndChannel = getRandomString(Random(3,10));
            SetStatusText("?c8Joining Channel " + (joinRandomChannel ? rndChannel : joinChannelInChat) );
            Say("/join " + (joinRandomChannel ? rndChannel : joinChannelInChat));
            joinedChannel = true;
            Delay(1000);
            if(channelLogin)
            {
               SetStatusText("?c8Channel Login...");
               Say(".login");
               Delay(2000);
            }
         }
      }
   case 1:   // Lobby
      if(location.id == 1 && joinChatAfterLogin)
      {
         Delay(Random(waitBeforeEnterChatMin, waitBeforeEnterChatMax));
         controlData.click(controlData.controls.lobby.button.enterChat);
         break;
      }
      if(GetTickCount() > nextGameMake)
      {
         var _control;

         lastGameFailed = false;

         switch(lastGameStatus)
         {
         case 0:
            _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
            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:
            outputGameLength();
            lastGameStatus = 0;
            setNextGameMake();
            if(lastGameFailed)
            {
               SetStatusText("?c1Failed to join!");
               sendEventToOOG(D2NT_MGR_PRINT_LOG, "?E00000Game " + ((getGameCounter(me.gamename, true)) ? ("(" + getGameCounter(me.gamename, false) + ")") : "") + " creation failed!", 0)
               Delay(2500);
            }
            sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
            break;
         }
      }
      else
          {
         if(joinChannelInChat && gameAnnouncement && me.gamename && isChannelUser(me.account, me.charname))
         {
            var tempDelay = (gameAnnouncementDelay > 5500) ? gameAnnouncementDelay : 5500 +
                     (gameAnnouncementDelayRandom > 700) ? Random(0, gameAnnouncementDelayRandom) : 500;
            var gameText = gameAnnouncement;
            gameText = gameText.replace("%password", me.gamepassword);
            gameText = gameText.replace("%game", getGameName(me.gamename));
            gameText = gameText.replace("%counter", getGameCounter(me.gamename, false));
            gameText = gameText.replace("%time", parseInt((nextGameMake - GetTickCount() - tempDelay)/1000+3.0));
            if(parseInt((nextGameMake - GetTickCount() - tempDelay)/1000+3.0) > 5)
            {   
               Delay(tempDelay);
               Say(gameText);         
           
          }
         timeoutDelay(nextGameMake-GetTickCount(), location, true);
      }
     }
      break;

   case 2: // Waiting In Line
      if(GetTickCount()-lastGameMade > waitInLineTimeout)
Delay(1000);
Say(myOwnText);
         controlData.click(controlData.controls.lobby.inLine.button.cancel);
      break;

   case 4: // Create Game
sendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);

      locationTimeout(5000, location);

      lastGameMade = GetTickCount();
      lastGameStatus = 1; // pending creation
      break;

   case 5: // Join Game
      break;

   case 6: // Ladder
      break;

   case 7: // Channel List
      break;

   case 8: // Main Menu
      if(controlData.getCurrentRealmIndex() == me.gatewayid)
      {
         outputGameLength();
         controlData.click(controlData.gameTypes[me.playtype]);
      }
      else
         controlData.click(controlData.controls.mainMenu.button.gateway);
      break;

   case 9: // Login
      sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
      Delay(loginDelay);

      controlData.setText(controlData.controls.login.editBox.accountName, me.account);

      sendEventToOOG(D2NT_MGR_LOGIN, location.name, 0);

      locationTimeout(5000, location);
      break;

   case 10: // Login Error (this is a fatal error, so stop)
      sendEventToOOG(D2NT_MGR_RESTART, location.name, 10);
      Delay(3500);
      break;

   case 11: // Unable To Connect
      timeoutDelay(unableToConnectRetry*60*1000, location)
      controlData.click(controlData.controls.login.unableToConnect.button.ok);
      break;

   case 12: // Character Select
      var _time, _control;

      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;
         setNextGameMake();
      }
      else
      {
         controlData.click(controlData.controls.characterSelect.button.exit);
         timeoutDelay(realmDownRetry*60*1000, location);
      }
      break;

   case 13: // Realm Down - Character Select screen
      controlData.click(controlData.controls.characterSelect.button.exit);
      timeoutDelay(realmDownRetry*60*1000, location);
      break;

   case 14: // Character Select - Disconnected
      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(!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
      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(!locationTimeout(connectingToBnetTimeout, location))
         controlData.click(controlData.controls.mainMenu.connecting.button.cancel);
      break;

   case 22: // Login - Invalid Cdkey (classic or xpac)
      sendEventToOOG(D2NT_MGR_RESTART, location.name, 3600);
      Delay(3500);
      break;   

   case 23: // Character Select - Connecting
      if(!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(!locationTimeout(pleaseWaitTimeout, location))
         controlData.click(controlData.controls.lobby.pleaseWait.button.cancel);
      break;

   case 26: // Lobby - Game Name Exists
      sendEventToOOG(D2NT_MGR_PRINT_LOG, "?E00000Game already exists", 0);
      SetStatusText("?c1Game akready exists!");
      inGameAt = 0;
      lastGameStatus = 0;
      setNextGameMake();

      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;
      setNextGameMake();

      locationTimeout(gameDoesNotExistTimeout, location);
      break;
   }
}

function sendEventToOOG(locationId, statusString, pendingTime)
{
   return SendCopyData("D2NT Manager", null, (locationId<<16)|pendingTime, statusString);
}

function setNextGameMake()
{
   lastGameMade = GetTickCount();
   nextGameMake = lastGameMade + createGameThreshold + Random(0-createGameThresholdRandom, createGameThresholdRandom) + inGameAt;
   inGameAt = 0;
   chatActionsDone = false;
}

function outputGameLength()
{
   if(inGameAt)
   {
      duration = GetTickCount() - inGameAt;

      inGameAt = (duration < gameMinLength ? gameMinLength - duration : 0);
   }
}

function locationTimeout(time, location)
{
   endtime = GetTickCount() + time;

   while(controlData.getLocation().id == location.id && endtime > GetTickCount())
   {
      sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " (" + parseInt((endtime-GetTickCount())/1000) + "s)", 0);
      Delay(500);
   }

   return (controlData.getLocation().id != location.id);
}

function timeoutDelay(time, location, showNextGameStatus)
{
   if(arguments.length < 3)
      showNextGameStatus = false;
   
   endtime = GetTickCount() + time;

   while(endtime > GetTickCount())
   {
      sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " (" + parseInt((endtime-GetTickCount())/1000) + "s)", 0);
      if(showNextGameStatus)
      {
         if(lastGameFailed && parseInt((endtime-GetTickCount())/1000) > 30)
         {
            if(parseInt((endtime-GetTickCount())/1000) % 30 == 0)
            {
               SetStatusText("?c1Last game failed!");
               Delay(5000);
            }
            if(me.gamename && getGameCounter(me.gamename, false))
               SetStatusText("?c8Next game: " + getGameName(me.gamename) + getGameCounter(me.gamename, false) + " (" + parseInt((endtime-GetTickCount())/1000) + "s)");
            else
               SetStatusText("?c8Game creation pending... (" + parseInt((endtime-GetTickCount())/1000) + "s)");
         }
         else if(parseInt((endtime-GetTickCount())/1000) >= 0)
         {
            if(me.gamename && getGameCounter(me.gamename, false))
               SetStatusText("?c8Next game: " + getGameName(me.gamename) + getGameCounter(me.gamename, false) + " (" + parseInt((endtime-GetTickCount())/1000) + "s)");
            else
               SetStatusText("?c8Game creation pending... (" + parseInt((endtime-GetTickCount())/1000) + "s)");
         }
      }
      Delay(1000);
         if(me.ingame)
            endtime = GetTickCount();
   }
   if(showNextGameStatus)
      SetStatusText("?c8Creating game...");
}

function getRandomString(_length)
{
   _retString = "";
   _charSet = "0123456789abcdefghijklmnopqrstuvwxyz";

   while(_length--)
   {
      _retString += _charSet.charAt(Random(0, _charSet.length-1));
      Delay(1);
   }

   return _retString;
}

function getGameName(lastGameString)
{
   if(!lastGameString)
      return "";
   else
      return (lastGameString.split("-")[0] + "-");
}

function getGameCounter(lastGameString, simple)
{
   var myCount;
   if(!lastGameString)
      return "-1";
   else
   {
      switch(lastGameString.split("-")[1])
      {
         case "08":
            myCount = 9;
            break;
         case "09":
            myCount = 10;
            break;
         default:
            myCount = parseInt(lastGameString.split("-")[1]) + 1;
            break;
      }
      if(!simple)
      {
         if(myCount <= 9)
            return ('0' + myCount);
      }
      return myCount;
   }
}

function isChannelUser(accountname, charname)
{
   for(var i = 0; i < channelUsers.length; i++)
   {
      if(accountname.toLowerCase() == channelUsers[i].toLowerCase() || charname.toLowerCase() == channelUsers[i].toLowerCase())
         return true;
   }
   return false;
}

Thanks for any and help!
« Last Edit: August 03, 2010, 04:02:44 PM by Tokey »

PureKaoz.com - D2NT, Diablo 3 & Starcaft 2 Hacks


Offline TheFreak

  • Just like an admin ;)
  • AFK Admins
  • PK Pro
  • *****
  • Join Date: May 2010
  • Posts: 372
  • Reputation 1
  • I rap and write javascript mutha fucka!
    • View Profile
Yu can probably do something like this:
Code: [Select]
for(_time = 0 ; _time <= nextGameMake ; _time += 1)
if(_time <= nextGameMake);
{
Say("Making Game = %game%counter");
Delay(200);
}

In tha case 4.


My New function:

function AlbertEinstein()
{
If (A = success in life)
A = x + y + z;
x = Work;
y = Play;
z = Keeping your mouth shut;
}

"Right after the Sam-Frodo suckfest, right before the credits roll, Sam fuckin' flat-out brick's in Frodo's mouth"

PureKaoz.com - D2NT, Diablo 3 & Starcaft 2 Hacks


Offline Tokey

  • Newbie
  • *
  • Join Date: Aug 2010
  • Posts: 1
  • Reputation 0
  • I <3 PureKaoz.com
    • View Profile
Hey, Thanks a ton. That looks like it would probably work, however I actually found another solution as well, but I'm wondering why the _ before the variables. I'm assuming this is language specific in which case I wonder which language?.

I first thought it was ahk or the other one due the %game etc.. then I realized that was just a placeholder after further examining the code.

All I did was put what I wanted before (or after) the setStatus functions thats in charge of displaying what is shown on the actual manager. Then copied a line of code to replace the placeholder.

I'll prob clean up the code some to make it easier for other people to change if they ever come back here.  Let me know if I should bother. Thanks again!

My Current Code:

Code: [Select]
/****************************************************************************
*               This file was modified by Muddy_Waters@epvp.de
*         Re-Modified by http://PureKaoz.com                  *                                                                                                   *
*                        Last Update: 05/19/2010                            *
****************************************************************************/
var gameMinLength      = 120000;   // time in milliseconds, 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      = 300;      // 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   = 20000;   // time in milliseconds to wait for a login to time out and click cancel and retry
var characterScreenTimeout   = 10000;   // time in milliseconds to wait for character screen to appear
var pleaseWaitTimeout      = 10000;   // time in milliseconds to wait for a please wait popup
var createGameThreshold      = 15000;      // time in milliseconds to wait between making games
var createGameThresholdRandom   = 5000;      // time in milliseconds to randomly add +/- to the game create time
var createGameTimeout      = 15000;   // time in milliseconds to register a failed to create game
var waitInLineTimeout      = 60000;   // time in milliseconds 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 loginDelay         = 1000;      // time in milliseconds to wait before submitting login information
var clickDelay         = 1000;      // wait X milliseconds before next action after a click event
var textDelay         = 1000;      // wait X milliseconds before next action after inserting text into a textbox
var clickDelayRandom      = 500;      // random amount of time to add to a click
var textDelayRandom      = 500;      // random amount of time to add to a text set
var gameDoesNotExistDelayMin   = 600000;   // how long to wait when a Game Does Not Exist occurs - minimum - default 10 minutes
var gameDoesNotExistDelayMax   = 900000;   // how long to wait when a Game Does Not Exist occurs - maximum - default 15 minutes
var gameDoesNotExistTimeout   = 30000;   // how long to wait for the dialog to disappear (default 30 seconds, don't change this)
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 FsA.Runs";      // leave blank not to join a private channel
var channelLogin         = false;   // 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("ChangedForForum");
channelUsers.push("ChangedForForum");
//----------------------------------------------------------------------------------------------------------------------------------------------------------
//These key expressions are replaced that way: %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 won't be any anncouncement right after login
var gameAnnouncement      = "The next game will be in %time seconds. Game name will be: %game%counter."; // leave blank not to post a channel announcement
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 myOwnText = "Creating %game%counter now!";
//----------------------------------------------------------------------------------------------------------------------------------------------------------
var waitBeforeEnterChatMin   = 1000;      // min how long to wait before entering chat
var waitBeforeEnterChatMax   = 2000;      // max how long to wait before entering chat
var waitInChatBeforeActionsMin   = 2000;      // min how long to wait before joining channel
var waitInChatBeforeActionsMax   = 3000;      // max how long to wait before joining channel

// DONT EDIT ANYTHING BELOW THIS

// 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 chatActionsDone = false;
var lastGameFailed = false;
var   joinedChannel = false;
var justJoined = true;

Include("libs/controlInfo.ntl");

var controlData = new controlInfo();

function NTMain()
{
   Delay(1000);

   var _ingame = false;

   controlData.clickDelay = clickDelay;
   controlData.textDelay = textDelay;
   controlData.clickDelayRandom = clickDelayRandom;
   controlData.textDelayRandom = textDelayRandom;

   while(1)
   {
      if(me.ingame)
      {
         if(!inGameAt)
            inGameAt = GetTickCount();

         if(!_ingame)
         {
            RunGC(); // run garbage collector between each game

            if(Load("NTBot/NTBotGame.ntj"))
            {
               _ingame = true;

               if(me.playtype > 0)
                  sendEventToOOG(D2NT_MGR_INGAME, "In Game [IP:" + me.gameserverip.split(".")[3] + "]", 0);
               else
                  sendEventToOOG(D2NT_MGR_INGAME, "In Game", 0);
               lastGameStatus = 2; // in game successful
            }
         }

         Delay(1000);
      }
      else
      {
         if(_ingame)
         {
            _ingame = false;

            sendEventToOOG(D2NT_MGR_READY, "", 0);
         }

         locationAction(controlData.getLocation());

         Delay(500);
      }
   }
}

function locationAction(location)
{
   switch(location.id)
   {
   case 3: // Lobby Chat
      if(justJoined)
      {
         justJoined = false;
         if(isChannelUser(me.account, me.charname))
         {
            for(var i = 0; i < 3; i++)
            {
               SetStatusText("?c2Chat actions enabled!");   
               Delay(750);
               SetStatusText("");   
               Delay(750);
            }
         }
         else
         {
            for(var i = 0; i < 3; i++)
            {
               SetStatusText("?c1Chat actions disabled!");   
               Delay(750);
               SetStatusText("");   
               Delay(750);
            }
         }
      }
      if(!chatActionsDone && isChannelUser(me.account, me.charname))
      {
         chatActionsDone = true;
         Delay(Random(waitInChatBeforeActionsMin, waitInChatBeforeActionsMax));
         if(!joinedChannel && (joinRandomChannel || joinChannelInChat != ""))
         {
            var rndChannel = getRandomString(Random(3,10));
            SetStatusText("?c8Joining Channel " + (joinRandomChannel ? rndChannel : joinChannelInChat) );
            Say("/join " + (joinRandomChannel ? rndChannel : joinChannelInChat));
            joinedChannel = true;
            Delay(1000);
            if(channelLogin)
            {
               SetStatusText("?c8Channel Login...");
               Say(".login");
               Delay(2000);
            }
         }
      }
   case 1:   // Lobby
      if(location.id == 1 && joinChatAfterLogin)
      {
         Delay(Random(waitBeforeEnterChatMin, waitBeforeEnterChatMax));
         controlData.click(controlData.controls.lobby.button.enterChat);
         break;
      }
      if(GetTickCount() > nextGameMake)
      {
         var _control;

         lastGameFailed = false;

         switch(lastGameStatus)
         {
         case 0:
            _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
            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:
            outputGameLength();
            lastGameStatus = 0;
            setNextGameMake();
            if(lastGameFailed)
            {
   Say("Game Creation Failed!");
               SetStatusText("?c1Failed to join!");
               sendEventToOOG(D2NT_MGR_PRINT_LOG, "?E00000Game " + ((getGameCounter(me.gamename, true)) ? ("(" + getGameCounter(me.gamename, false) + ")") : "") + " creation failed!", 0)
               Delay(2500);
            }
            sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
            break;
         }
      }
      else
          {
         if(joinChannelInChat && gameAnnouncement && me.gamename && isChannelUser(me.account, me.charname))
         {
            var tempDelay = (gameAnnouncementDelay > 5500) ? gameAnnouncementDelay : 5500 +
                     (gameAnnouncementDelayRandom > 700) ? Random(0, gameAnnouncementDelayRandom) : 500;
            var gameText = gameAnnouncement;
            gameText = gameText.replace("%password", me.gamepassword);
            gameText = gameText.replace("%game", getGameName(me.gamename));
            gameText = gameText.replace("%counter", getGameCounter(me.gamename, false));
            gameText = gameText.replace("%time", parseInt((nextGameMake - GetTickCount() - tempDelay)/1000+3.0));
            if(parseInt((nextGameMake - GetTickCount() - tempDelay)/1000+3.0) > 5)
            {   
               Delay(tempDelay);
               Say(gameText);         
           
          }
         timeoutDelay(nextGameMake-GetTickCount(), location, true);
      }
     }
      break;

   case 2: // Waiting In Line
      if(GetTickCount()-lastGameMade > waitInLineTimeout)
         controlData.click(controlData.controls.lobby.inLine.button.cancel);
      break;

   case 4: // Create Game
sendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);

      locationTimeout(5000, location);

      lastGameMade = GetTickCount();
      lastGameStatus = 1; // pending creation
      break;

   case 5: // Join Game
      break;

   case 6: // Ladder
      break;

   case 7: // Channel List
      break;

   case 8: // Main Menu
      if(controlData.getCurrentRealmIndex() == me.gatewayid)
      {
         outputGameLength();
         controlData.click(controlData.gameTypes[me.playtype]);
      }
      else
         controlData.click(controlData.controls.mainMenu.button.gateway);
      break;

   case 9: // Login
      sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
      Delay(loginDelay);

      controlData.setText(controlData.controls.login.editBox.accountName, me.account);

      sendEventToOOG(D2NT_MGR_LOGIN, location.name, 0);

      locationTimeout(5000, location);
      break;

   case 10: // Login Error (this is a fatal error, so stop)
      sendEventToOOG(D2NT_MGR_RESTART, location.name, 10);
      Delay(3500);
      break;

   case 11: // Unable To Connect
      timeoutDelay(unableToConnectRetry*60*1000, location)
      controlData.click(controlData.controls.login.unableToConnect.button.ok);
      break;

   case 12: // Character Select
      var _time, _control;

      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;
         setNextGameMake();
      }
      else
      {
         controlData.click(controlData.controls.characterSelect.button.exit);
         timeoutDelay(realmDownRetry*60*1000, location);
      }
      break;

   case 13: // Realm Down - Character Select screen
      controlData.click(controlData.controls.characterSelect.button.exit);
      timeoutDelay(realmDownRetry*60*1000, location);
      break;

   case 14: // Character Select - Disconnected
      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(!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
      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(!locationTimeout(connectingToBnetTimeout, location))
         controlData.click(controlData.controls.mainMenu.connecting.button.cancel);
      break;

   case 22: // Login - Invalid Cdkey (classic or xpac)
      sendEventToOOG(D2NT_MGR_RESTART, location.name, 3600);
      Delay(3500);
      break;   

   case 23: // Character Select - Connecting
      if(!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(!locationTimeout(pleaseWaitTimeout, location))
         controlData.click(controlData.controls.lobby.pleaseWait.button.cancel);
      break;

   case 26: // Lobby - Game Name Exists
      sendEventToOOG(D2NT_MGR_PRINT_LOG, "?E00000Game already exists", 0);
Say("Game already exist");
      SetStatusText("?c1Game akready exists!");
      inGameAt = 0;
      lastGameStatus = 0;
      setNextGameMake();

      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;
      setNextGameMake();

      locationTimeout(gameDoesNotExistTimeout, location);
      break;
   }
}

function sendEventToOOG(locationId, statusString, pendingTime)
{
   return SendCopyData("D2NT Manager", null, (locationId<<16)|pendingTime, statusString);
}

function setNextGameMake()
{
   lastGameMade = GetTickCount();
   nextGameMake = lastGameMade + createGameThreshold + Random(0-createGameThresholdRandom, createGameThresholdRandom) + inGameAt;
   inGameAt = 0;
   chatActionsDone = false;
}

function outputGameLength()
{
   if(inGameAt)
   {
      duration = GetTickCount() - inGameAt;

      inGameAt = (duration < gameMinLength ? gameMinLength - duration : 0);
   }
}

function locationTimeout(time, location)
{
   endtime = GetTickCount() + time;

   while(controlData.getLocation().id == location.id && endtime > GetTickCount())
   {
      sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " (" + parseInt((endtime-GetTickCount())/1000) + "s)", 0);
      Delay(500);
   }

   return (controlData.getLocation().id != location.id);
}

function timeoutDelay(time, location, showNextGameStatus)
{
   if(arguments.length < 3)
      showNextGameStatus = false;
   
   endtime = GetTickCount() + time;

   while(endtime > GetTickCount())
   {
      sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " (" + parseInt((endtime-GetTickCount())/1000) + "s)", 0);
      if(showNextGameStatus)
      {
         if(lastGameFailed && parseInt((endtime-GetTickCount())/1000) > 30)
         {
            if(parseInt((endtime-GetTickCount())/1000) % 30 == 0)
            {
               SetStatusText("?c1Last game failed!");
               Delay(5000);
            }
            if(me.gamename && getGameCounter(me.gamename, false))
               SetStatusText("?c8Next game: " + getGameName(me.gamename) + getGameCounter(me.gamename, false) + " (" + parseInt((endtime-GetTickCount())/1000) + "s)");
            else
               SetStatusText("?c8Game creation pending... (" + parseInt((endtime-GetTickCount())/1000) + "s)");
         }
         else if(parseInt((endtime-GetTickCount())/1000) >= 0)
         {
            if(me.gamename && getGameCounter(me.gamename, false))
               SetStatusText("?c8Next game: " + getGameName(me.gamename) + getGameCounter(me.gamename, false) + " (" + parseInt((endtime-GetTickCount())/1000) + "s)");
            else
               SetStatusText("?c8Game creation pending... (" + parseInt((endtime-GetTickCount())/1000) + "s)");
         }
      }
      Delay(1000);
         if(me.ingame)
            endtime = GetTickCount();
   }
   if(showNextGameStatus)
var gameText = myOwnText;
            gameText = gameText.replace("%game", getGameName(me.gamename));
gameText = gameText.replace("%counter", getGameCounter(me.gamename, false));
Say(gameText);
      SetStatusText("?c8Creating game...");

}

function getRandomString(_length)
{
   _retString = "";
   _charSet = "0123456789abcdefghijklmnopqrstuvwxyz";

   while(_length--)
   {
      _retString += _charSet.charAt(Random(0, _charSet.length-1));
      Delay(1);
   }

   return _retString;
}

function getGameName(lastGameString)
{
   if(!lastGameString)
      return "";
   else
      return (lastGameString.split("-")[0] + "-");
}

function getGameCounter(lastGameString, simple)
{
   var myCount;
   if(!lastGameString)
      return "-1";
   else
   {
      switch(lastGameString.split("-")[1])
      {
         case "08":
            myCount = 9;
            break;
         case "09":
            myCount = 10;
            break;
         default:
            myCount = parseInt(lastGameString.split("-")[1]) + 1;
            break;
      }
      if(!simple)
      {
         if(myCount <= 9)
            return ('0' + myCount);
      }
      return myCount;
   }
}

function isChannelUser(accountname, charname)
{
   for(var i = 0; i < channelUsers.length; i++)
   {
      if(accountname.toLowerCase() == channelUsers[i].toLowerCase() || charname.toLowerCase() == channelUsers[i].toLowerCase())
         return true;
   }
   return false;
}

edit: took out account name / char name.
« Last Edit: August 03, 2010, 10:24:21 PM by Tokey »

Offline fireshocker

  • Newbie
  • *
  • Join Date: Jun 2010
  • Posts: 11
  • Reputation 0
    • View Profile
the script all works for me, but is there anyway that if you disable login that it does not announce games in channel?

PureKaoz.com - D2NT, Diablo 3 & Starcaft 2 Hacks


Offline mythosis

  • PK Pro
  • ****
  • Join Date: Aug 2010
  • Posts: 265
  • Reputation 0
  • USWest Channel: op pkbaal
    • View Profile
Assuming
Code: [Select]
var channelLogin         = false;
You can disable game announcements on channelLogin==false
Just put it into an if statement surrounding the gameAnnounce code, such as
if( channelLogin == true )
{ [chatstuff] }

Like so:
Code: [Select]
else
{
if(channelLogin == true) // true: announce, false: dont announce
{
if(joinChannelInChat && gameAnnouncement && me.gamename && isChannelUser(me.account, me.charname))
{
var tempDelay = (gameAnnouncementDelay > 5500) ? gameAnnouncementDelay : 5500 +
  (gameAnnouncementDelayRandom > 700) ? Random(0, gameAnnouncementDelayRandom) : 500;
var gameText = gameAnnouncement;
gameText = gameText.replace("%password", me.gamepassword);
gameText = gameText.replace("%game", getGameName(me.gamename));
gameText = gameText.replace("%counter", getGameCounter(me.gamename, false));
gameText = gameText.replace("%time", parseInt((nextGameMake - GetTickCount() - tempDelay)/1000+3.0));
if(parseInt((nextGameMake - GetTickCount() - tempDelay)/1000+3.0) > 5)
{
Delay(tempDelay);
Say(gameText);
}
}
timeoutDelay(nextGameMake-GetTickCount(), location, true);
}
}
break;
case 2: // Waiting In Line

PureKaoz.com - D2NT, Diablo 3 & Starcaft 2 Hacks