Author Topic: Join Game If Game Already Exists?  (Read 1071 times)

cooptheking

  • Guest
Re: Join Game If Game Already Exists?
« Reply #15 on: July 22, 2010, 01:31:15 AM »
just announces ng in channel the ends

:S

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

Re: Join Game If Game Already Exists?
« Reply #15 on: July 22, 2010, 01:31:15 AM »

cooptheking

  • Guest
Re: Join Game If Game Already Exists?
« Reply #16 on: July 22, 2010, 02:53:32 AM »
the script below is what im left at after all these hours of testing + Freak/Justins input
it does everything fine EXCEPT for game name
What it needs to do is instead of "Get Game Number = counter"
it needs to be like "Get Game Number = counter - 1"
since the counter will always be 1 ahead of what its trying to "join"
anyone got any ideas?!


Code: [Select]
var gameMinLength = 180000; // time in milliseconds, minimum game length, 180 seconds default (1 game/3 minutes)

var unableToConnectRetry = 15; // 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 = 15; // time in minutes to retry on a disconnection (usually ip ban related)
var cdkeyInUseRetry = 15; // 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 = 25000; // 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 = 7000; // time in milliseconds to wait before selecting a character on the char screen
var loginDelay = 6000; // time in milliseconds to wait before submitting login information
var clickDelay = 2000; // wait X milliseconds before next action after a click event
var textDelay = 2000; // wait X milliseconds before next action after inserting text into a textbox
var clickDelayRandom = 1000; // 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 joinChatAfterGame = true; // join chat after leaving a game
var joinRandomChannel = false; // if this is true, will join a random channel, otherwise it will use the channel below..
var joinChannelInChat = "op gpk"; // leave blank to not join a private channel
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 gameAnnouncement      = "Gpkchants-%counter"; // leave blank not to post a channel announcement
var gameAnnouncementDelay   = 700;      // wait X milliseconds before posting the announcement message (don't set this too low!)
var gameAnnouncementDelayRandom = 50; // random amount of time to add to a to the announcement delay
var lastGameMade = GetTickCount();


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(!chatActionsDone)
{
chatActionsDone = true;
Delay(Random(waitInChatBeforeActionsMin, waitInChatBeforeActionsMax));

if(joinRandomChannel || joinChannelInChat != "")
{
Say("/join " + (joinRandomChannel ? getRandomString(Random(3,10)) : joinChannelInChat));
Delay(1000);
}
}


case 1: // Lobby
if(location.id == 1 && joinChatAfterGame)
{
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(); // reset inGameAt, to wait how long we should have waited..
lastGameFailed = true;
case 2:
outputGameLength();
lastGameStatus = 0;
setNextGameMake();
sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
break;
}
}
else
timeoutDelay(nextGameMake-GetTickCount(), location);
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 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 Already

 if(gameAnnouncement && me.gamename)
         {
            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));
            gameText1 = gameText.replace("%counter", getGameCounter(me.gamename, true));
            {   
           
               Say(gameText);
            }
                     controlData.click(controlData.controls.lobby.button.join);
Delay(1000);
                 controlData.setText( controlData.controls.lobby.join.editBox.gameName, gameText1);
            Delay(1000);
         controlData.click(controlData.controls.lobby.join.button.joinGame);
check = 1;

// inGameAt = 0;
// lastGameStatus = 0;
// setNextGameMake();

locationTimeout(5000, 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 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;
}


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)
{
endtime = GetTickCount() + time;

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

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

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

return _retString;
}
« Last Edit: July 22, 2010, 11:53:27 AM by TheFreak »

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

Re: Join Game If Game Already Exists?
« Reply #16 on: July 22, 2010, 02:53:32 AM »

Offline mythosis

  • PK Pro
  • ****
  • Join Date: Aug 2010
  • Posts: 265
  • Reputation 0
  • USWest Channel: op pkbaal
    • View Profile
Re: Join Game If Game Already Exists?
« Reply #17 on: September 04, 2010, 11:27:22 PM »
Did you ever get this working?

Quote
What it needs to do is instead of "Get Game Number = counter"
it needs to be like "Get Game Number = counter - 1"
Try using a dummy variable to hold the last game. Assign it right before the bot tries to create each game. If he fails, then use the dummy variable for the join.

cooptheking

  • Guest
Re: Join Game If Game Already Exists?
« Reply #18 on: September 05, 2010, 12:23:48 AM »
Did you ever get this working?

Quote
What it needs to do is instead of "Get Game Number = counter"
it needs to be like "Get Game Number = counter - 1"
Try using a dummy variable to hold the last game. Assign it right before the bot tries to create each game. If he fails, then use the dummy variable for the join.
well i got it to do it half ass

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

Re: Join Game If Game Already Exists?
« Reply #18 on: September 05, 2010, 12:23:48 AM »