hmm die benutze ich eigentlich.. hier ist mein code (namen sind in der eigentlichen datei natürlich richtig geschrieben). ist das nicht die version, die du meinst?
Code:
// commented out the /f l line, but can be uncommented if you wich
// added white screen of death fix and also some print txt for testing 2-17-11 stairbuilder
// added stagger leech joining 9-25-11 by stair
// added single /f l try to enter games for switching keys and missing the game join message 9-25-11 by stair
// added a while loop and manager print if a bad cd key is used or bad account or password stair 9-25-11
// added gameDoesNotExistDelay and txt file joining. Must use updated leader entry point for the txt joining
// added 3 new config options tryLeaderGame1x, retryLeaderGame, tryLeaderGame1x 12-22-2011
// changed where the game count increase is called to right when bot enters chat instead of waiting for game name. Saves a second or 2 credit for this goes to stib 1-21-12
// fixed /f l delay to only apply after the first /f l 1-21-12
// added fastJoin option. read comments next to setting below 1/22/12
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// Renamed from LeechStarter2.3 to LeechStarter on 4/27/2013 by Tru
// Version of the LeechStarter remains at 2.3!
// =============================================================================
// Leader Account settings
// =============================================================================
var leaderAccountName = "xxx_yy";
var leaderName = "yyy";
// =============================================================================
// Leecher game entry delays use to stagger when leechers join game
// [characterName, delay in milliseconds] - leave these as-is to not use them
// =============================================================================
var leecher1 = ["characterName", 100];
var leecher2 = ["characterName", 750];
var leecher3 = ["characterName", 1250];
var leecher4 = ["characterName", 2000];
//==============================================================================
// join options
//==============================================================================
var useFL = true; // set true if you wish your leecher to use /f l to join games. useFL MUST be set to 0 for this to work
var useFLCount = 0; // this is seperate from the above setting allows you to use /f l to join, but will only spam /f l the set number of times. set to 0 to disable
var delayFL = 5000; // milliseconds before the bot will use the /f l command in loby
var reEnterSameGame = false; // set to false to keep the bot from using /f l to re enter same game also must be set to false if you don't want bot to re enter same game for txt joining
var useTextFileJoin = false; // use txt file communication between leader and leecher to join games
var gameDoesNotExistDelay = 10; // time to idle before trying if leader's game does not exist. In seconds.
var tryLeaderGame1x = false; // will only try to enter the game one time. Good for when leader drops before leecher gets in.
var retryLeaderGame = 2; // number of times you would like to try joining leaders game. Note tryLeaderGame1x = true bypasses this and the delay below
var retryLeaderGameDelay = 10; // time in seconds to delay between retrying to enter leaders game
var fastJoin = true; // this has preconfigured delays for easy switching. Gets you leecher in game in about 3 seconds. THIS MAY CAUSE JOIN PROBLEMS FOR SOME USERS!!!!!
var ftjDelay = 180; // time to idle before trying if leecher failed to join. In seconds.
// =============================================================================
// Game password (leave blank if none)
// =============================================================================
var gamepassword = "zzz";
// =============================================================================
// UseCDKeyChangeTrick :
// if true, the follow bot will say his gamename/gamepwd (set in the OOG) in chat before each game
// in order to increment his number of runs (to switch CDKeys after xx runs)
// if false, the follow bot will never change his CDKey
// =============================================================================
var UseCDKeyChangeTrick = false;
// =============================================================================
// Debug : set to true if you are experiencing problems with your JoinBot
// it will log in your OOG the lobby chat actions
// =============================================================================
var Debug = false;
////////////////////////////////////////////////////////////////////////////////
// Lobby chat settings :
////////////////////////////////////////////////////////////////////////////////
var joinChatAfterGame = true; // Set to true to join the chat after each game (needed for JoinBot)
var firstJoinMessage = ""; // Message said when you first enter the chat
var chatMessageAfterGame = ""; // Message said after each game
var joinRandomChannel = false; // if this is true, will join a random channel, otherwise it will use the channel below..
var joinChannelInChat = "channel xyz"; // Name of the channel you want to join (leave blank if you want to stay in the default channel)
////////////////////////////////////////////////////////////////////////////////
// Delays:
////////////////////////////////////////////////////////////////////////////////
// Minimum game length, waits in the lobby if last game was too short
// I recommend to keep a value > 300000 (milliseconds) to avoid bnet temporary ban
var gameMinLength = 420000; // Milliseconds
// Realm Delays
var unableToConnectRetry = 20; // Minutes
var realmDownRetry = 480; // Minutes
var disconnectedRetry = 5; // Minutes
var cdkeyInUseRetry = 5; // Minutes
if(fastJoin) {
// interface delays (milliseconds)
var connectingToBnetTimeout = 20000;
var characterScreenTimeout = 10000;
var pleaseWaitTimeout = 10000;
var createGameThreshold = 10000;
var createGameThresholdRandom = 1000;
var createGameTimeout = 15000;
var waitInLineTimeout = 15000;
var characterSelectDelay = 1000;
var loginDelay = 1000;
var clickDelay = 0;
var textDelay = 0;
var clickDelayRandom = 0;
var textDelayRandom = 0;
var gameDoesNotExistDelayMin = 600000; // this not for leech configuration. Look for gameDoesNotExistDelay above
var gameDoesNotExistDelayMax = 900000; // this not for leech configuration. Look for gameDoesNotExistDelay above
var gameDoesNotExistTimeout = 30000;
var waitBeforeEnterChatMin = 1000;
var waitBeforeEnterChatMax = 2000;
var waitInChatBeforeActionsMin = 2000;
var waitInChatBeforeActionsMax = 3000;
} else {
var connectingToBnetTimeout = 20000;
var characterScreenTimeout = 10000;
var pleaseWaitTimeout = 10000;
var createGameThreshold = 10000;
var createGameThresholdRandom = 1000;
var createGameTimeout = 15000;
var waitInLineTimeout = 15000;
var characterSelectDelay = 1000;
var loginDelay = 1000;
var clickDelay = 500;
var textDelay = 500;
var clickDelayRandom = 500;
var textDelayRandom = 500;
var gameDoesNotExistDelayMin = 600000; // this not for leech configuration. Look for gameDoesNotExistDelay above
var gameDoesNotExistDelayMax = 900000; // this not for leech configuration. Look for gameDoesNotExistDelay above
var gameDoesNotExistTimeout = 30000;
var waitBeforeEnterChatMin = 1000;
var waitBeforeEnterChatMax = 2000;
var waitInChatBeforeActionsMin = 2000;
var waitInChatBeforeActionsMax = 3000;
}
// Only for JoinBot (friend list delay, milliseconds)
var LeaderOfflineDelay = 30000;
var LeaderInChatDelay = 10000;
var GameIsFullDelay = 30000;
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// DO NOT 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 sayChatMsgAfterGame = false;
var ftjcount = 0;
Include("libs/controlInfo.ntl");
Include("libs/common/NTColorConverter.ntl");
var controlData = new controlInfo();
var increaseGameCount = true;
var firstTimeFl = true;
var retryLeaderGameCount = 0;
var lastGame = "";
var retryFL = 0;
var game = '';
var _gamename = "";
var _gamepassword = "";
var _leaderOfflineTick = -LeaderOfflineDelay;
var _leaderInChatTick = -LeaderInChatDelay;
var _GameIsFullTick = -GameIsFullDelay;
function NTMain()
{
Delay(1000);
var _ingame = false;
controlData.clickDelay = clickDelay;
controlData.textDelay = textDelay;
controlData.clickDelayRandom = clickDelayRandom;
controlData.textDelayRandom = textDelayRandom;
while(1)
{
if(me.ingame)
{
_gamename = me.gamename;
_gamepassword = me.gamepassword;
if(!inGameAt)
inGameAt = GetTickCount();
if(!_ingame)
{
RunGC(); // run garbage collector between each game
if(Load("NTBot/NTBotGame.ntj"))
{
if(!reEnterSameGame) { NT_File("logs/messagecomands/"+me.charname+"-lastgame.txt", 1, me.gamename); } // writes current game for comparing to new game to join next time in lobby
retryFL = 0; // sets the counter back to 0 upon game entry.
_ingame = true;
retryLeaderGameCount = 0;
firstTimeFl = true;
increaseGameCount = 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)
{
My_ExitGame_Check(); // out of korean modded d2nt fixes white screen of death
_ingame = false;
sayChatMsgAfterGame = true;
sendEventToOOG(D2NT_MGR_READY, "", 0);
}
locationAction(controlData.getLocation());
Delay(500);
}
}
}
function locationAction(location)
{
switch(location.id)
{
case 3: // Lobby Chat
sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
//ftjcheck
if (ftjcount >= 10 && lastGameStatus == 1) {
sendEventToOOG(D2NT_MGR_PRINT_LOG, COLOR_1 + "FTJ detected...........Idling", 0);
ftjcount = 0;
inGameAt = 0;
lastGameStatus = 0;
setNextGameMake();
locationTimeout(ftjDelay*1000, location);
}
//LogPrintSimple(me.account + "MyAccountTest.txt", me.account + " / " + me.charname) // this is to check for 2nd account login
if (UseCDKeyChangeTrick && increaseGameCount) {
sendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);
increaseGameCount = false;
Delay(1000);
}
if(!chatActionsDone)
{
Delay(Random(waitInChatBeforeActionsMin, waitInChatBeforeActionsMax));
if(joinRandomChannel || joinChannelInChat != "")
{
Say("/join " + (joinRandomChannel ? getRandomString(Random(3,10)) : joinChannelInChat));
Delay(1000);
}
if(firstJoinMessage)
{
Say(firstJoinMessage);
Delay(200);
}
chatActionsDone = true;
}
if (chatMessageAfterGame && _gamename != "" && sayChatMsgAfterGame == true)
{
Say(chatMessageAfterGame);
sayChatMsgAfterGame = false;
Delay(200);
}
game = '';
if(useTextFileJoin) {
NT_RetrievenextGame(); //read message from txt file and set game and gamepassword vars from that
}
else {
if(useFL || useFLCount > 0) {
var _tick = GetTickCount();
if ((_leaderOfflineTick < 0 || (_leaderOfflineTick + LeaderOfflineDelay) < _tick) // maybe play with this so it skips it for 30 seconds
&& (_leaderInChatTick < 0 || (_leaderInChatTick + LeaderInChatDelay) < _tick)
&& (_GameIsFullTick < 0 || (_GameIsFullTick + GameIsFullDelay) < _tick))
{
Delay(500);
DebugInOOG('Locating the leader : '+leaderAccountName);
if(useFLCount > 0 && retryFL < useFLCount) {
if(!firstTimeFl) {
Delay(delayFL);
} else {
firstTimeFl = false;
}
Say('/f l');
retryFL++;
}
else if(useFL) {
if(!firstTimeFl) {
Delay(delayFL);
} else {
firstTimeFl = false;
}
Say('/f l');
}
}
}
if(chat = controlData.get(controlData.controls.lobby.chat.textBox.channelText))
{
var found_leader = false;
lines = chat.GetText();
if(!lines) { break; }
for (var line_id = lines.length - 1; line_id > -1; line_id--)
{
if (found_leader) // useless... :/
break;
if (lines[line_id].substring(0,1) == " ")
continue;
// retrieving the whole message
var msg = lines[line_id].replace(/^\s+|\s+$/, "");
var msglines = 1;
while (lines[line_id+msglines] != undefined && lines[line_id+msglines].substring(0,2) == " ")
{
msg += " " + lines[line_id+msglines].replace(/^\s+|\s+$/, "");
msglines++;
}
if (msg.lastIndexOf(leaderName) >= 0)
DebugInOOG("yc8found him :;"+msg);
// checking if the msg is a friendly whisper
if (msg.lastIndexOf(leaderName + ' (*' +leaderAccountName+')') > -1 || msg.lastIndexOf(leaderName + '@' + GateWayToName() + ' (*' +leaderAccountName+')') > -1)
// if (msg.lastIndexOf(leaderName + ' (*' +leaderAccountName+')') > -1) // need to modify this and then add another to handle the "@USWest
{ // should be just a matter of leaderName + '@' and then register the 2nd line as game name
var regGameNameWhispered=/^.*in_new_game\s+(.*)$/gi; // replaced below with this to join on mesage upon entering game
//var regGameNameWhispered=/^.*(game|partie|spiel|partita|partida).*(nomm[^\s]*|called|chiamata)\s*([\w\s-]*\w)\s*\.\s*$/gi;
if (msg.match(regGameNameWhispered))
game = msg.replace(regGameNameWhispered, "$1"); // replaced below with this to join on mesage upon entering game
//game = msg.replace(regGameNameWhispered, "$3");
if (game != '')
{
found_leader = true;
break;
}
}
// checking if the msg is from the friend list
if (msg.lastIndexOf(': '+leaderAccountName+',') > -1)
{
found_leader = true;
var regOffline=/^.*(offline|desconectado).*$/gi;
var regInChat=/^.*(channel|canale?)\s*([\w\s-]*\w)\.?\s*$/gi;
var regGameName=/^.*(game|partie|spiel|partita|partida)\s*([\w\s-]*\w)\s*\(priv[^\)]*\)\.\s*$/gi;
if (msg.match(regOffline)
&& (_leaderOfflineTick < 0 || (_leaderOfflineTick + LeaderOfflineDelay) < _tick))
{
DebugInOOG('Leader is offline, delay '+Math.round(LeaderOfflineDelay/1000)+' sec for next /f l.');
_leaderOfflineTick = GetTickCount();
}
else if (msg.match(regInChat)
&& (_leaderInChatTick < 0 || (_leaderInChatTick + LeaderInChatDelay) < _tick))
{
DebugInOOG('Leader is in the chat "'+msg.replace(regInChat, "$2")+'", delay '+Math.round(LeaderInChatDelay/1000)+' sec for next /f l.');
_leaderInChatTick = GetTickCount();
}
else if (msg.match(regGameName)
&& ((_leaderOfflineTick < 0 || (_leaderOfflineTick + LeaderOfflineDelay) < _tick)
&& (_leaderInChatTick < 0 || (_leaderInChatTick + LeaderInChatDelay) < _tick)))
{
game = msg.replace(regGameName, "$2");
}
else if ((_leaderInChatTick < 0 || (_leaderInChatTick + LeaderInChatDelay) < _tick)
&& (_leaderOfflineTick < 0 || (_leaderOfflineTick + LeaderOfflineDelay) < _tick))
{
// unhandled line, supposelly "In Realm"
DebugInOOG('The leader was in the the lobby but not in chat, delay '+Math.round(LeaderInChatDelay/1000)+' sec for next /f l.');
_leaderInChatTick = GetTickCount();
}
break;
}
}
if (found_leader == false)
DebugInOOG('I couldn\'t find the leader in my friend list!');
}
else
{
DebugInOOG('I can\'t read the chat!');
//DebugInOOG('You probably haven\'t added the lobby chat controlinfo coordinates!');
Delay(30000);
}
}
if(!reEnterSameGame) { // added to check game name. If same as last game then don't re enter.
NT_RetrieveLastGame();
//Delay(250);
if(lastGame == game) {
game = "";
}
}
if (game!="")
{
DebugInOOG('Leader is in the game "' + game + '"');
controlData.click(controlData.controls.lobby.button.join);
Delay(100);
}
break;
case 1: // Lobby
if(location.id == 1 && joinChatAfterGame)
{
//LogPrintSimple(me.account + "MyAccountTest.txt", me.account + " / " + me.charname) // this is to check for 2nd account login
Delay(Random(waitBeforeEnterChatMin, waitBeforeEnterChatMax));
controlData.click(controlData.controls.lobby.button.enterChat);
break;
}
break;
case 2: // Waiting In Line
if(GetTickCount()-lastGameMade > waitInLineTimeout)
controlData.click(controlData.controls.lobby.inLine.button.cancel);
break;
case 4: // Create Game
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);
break;
}
sendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);
locationTimeout(5000, location);
lastGameMade = GetTickCount();
lastGameStatus = 1; // pending creation
break;
case 5: // Join Game
if (game)
{
if(retryLeaderGameCount > 0 && retryLeaderGameDelay > 0) {
Delay(retryLeaderGameDelay * 1000);
}
controlData.setText( controlData.controls.lobby.join.editBox.gameName, game);
Delay (100);
controlData.setText( controlData.controls.lobby.join.editBox.password, gamepassword);
//SendCopyData("D2NT Manager", null, 9<<16, "-- Debug : " + COLOR_1 +me.charname);
if(leecher1[0] == me.charname){
Delay(leecher1[1]);
}
else if(leecher2[0] == me.charname){
Delay(leecher2[1]);
}
else if(leecher3[0] == me.charname){
Delay(leecher3[1]);
}
else if(leecher4[0] == me.charname){
Delay(leecher4[1]);
}
else{
Delay(100);
}
if(tryLeaderGame1x && retryLeaderGame <= 0) {
NT_File("logs/messagecomands/"+me.charname+"-lastgame.txt", 1, game); // writes current game for comparing to new game to join next time in lobby
game = "";
}
if(retryLeaderGame > 0 && !tryLeaderGame1x && retryLeaderGameCount < retryLeaderGame) { // increases the leadergamecount
retryLeaderGameCount++;
}
if(retryLeaderGame > 0 && !tryLeaderGame1x && retryLeaderGameCount >= retryLeaderGame) { // sets game name to "" because we have made as many attempts as configured to join
game = "";
}
controlData.click(controlData.controls.lobby.join.button.joinGame);
RunGC(); // run garbage collector between each game
locationTimeout(5000, location);
lastGameStatus = 1; // pending join
}
else
{
DebugInOOG('No game to join : cancelling');
me.Cancel(1);
Delay(1000);
}
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_PRINT_LOG, COLOR_1 + "Bad Account or PW Entered.......Idling", 0);
while(1) { Delay(500); }
//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_PRINT_LOG, COLOR_1 + "Bad CD Key...........Idling", 0);
while(1) { Delay(500); }
//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, "yE00000Game already exists", 0);
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
sendEventToOOG(D2NT_MGR_PRINT_LOG, COLOR_1 + "Leader's game does not exist...........Idling", 0);
Delay(gameDoesNotExistDelay*1000);
inGameAt = Random(gameDoesNotExistDelayMin, gameDoesNotExistDelayMax);
lastGameStatus = 0;
setNextGameMake();
locationTimeout(gameDoesNotExistTimeout, location);
break;
default:
if (lastGameStatus == 1) {
sendEventToOOG(D2NT_MGR_PRINT_STATUS, "Please Wait...", 0);
for (ftjcount=0; ftjcount<=10 && !me.ingame; ftjcount++) {
Delay(1000)
}
}
DebugInOOG("Unhandled location : "+location.id);
break;
}
DebugInOOG("Location : "+location.id);
}
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;
}
function DebugInOOG(logString)
{
if (Debug)
return SendCopyData("D2NT Manager", null, 9<<16, "-- Debug : " + logString);
else
return false;
}
function My_ExitGame_Check()
{
for (var i = 0; i < 40; i++)
{
if (controlData.getLocation().id != undefined)
break;
if (i > 38)
{
LogPrintSimple(me.account + " StarterTest.txt", "White Screen of Death: Restarting")
sendEventToOOG(D2NT_MGR_PRINT_LOG, COLOR_1 + "White Screen of Death: Restarting", 0);
sendEventToOOG(D2NT_MGR_RESTART, "", 5);
My_Delay(); // make sure and add this also
}
Delay(500);
}
}
function My_Delay(retry)
{
if (arguments.length < 1)
retry = 20;
while (retry-- > 0)
Delay(1000);
}
function LogPrintSimple(filepath, mesg){
var _filepath = filepath;
var _mesg = mesg;
var date = new Date().toLocaleFormat("<%a, %b %d, %H:%M>");
var logfile = FileOpen(_filepath, 2); // opens file
if(!logfile)
var logfile = FileOpen(_filepath, 1); // if file not there then creates it
logfile.WriteLine(date + " " + _mesg );
logfile.Close();
}
function GateWayToName(){
switch(me.gatewayid){
case 0: return 'USWest';
case 1: return 'USEast';
case 2: return 'Asia';
case 3: return 'Europe';
default: return 'ugly'; // not sure how asia1, asia2, etc work so adding this for now
}
}
// modes 0 = read only, 1 = overwrite the file, 2 = add to file
function NT_File(path, mode, msg, delay) { //big thanks to all the koreans out there
var _msg = "";
var _line = "";
var _fileHandle;
var _isFileCheck = false;
if (arguments.length < 3) { msg = ""; }
if (arguments.length < 4) { delay = (mode > 0) ? 5 : 2; }
while (delay--) {
if (mode == 2 && !_isFileCheck) {
_fileHandle = FileOpen(path, 0);
if (!_fileHandle)
_fileHandle = FileOpen(path, 1);
if (_fileHandle)
_fileHandle.Close();
_isFileCheck = true;
}
_fileHandle = FileOpen(path, mode);
if (_fileHandle)
break;
if (delay)
Delay(200);
}
if (_fileHandle) {
if (mode == 0) {
while (!_fileHandle.eof) {
_line = _fileHandle.ReadLine();
if (_line || !_fileHandle.eof)
_msg += _line + msg;
}
}
else if (msg)
_fileHandle.WriteLine(msg);
_fileHandle.Close();
}
return _msg;
}
function NT_RetrieveLastGame() {
var grabLastGame = FileOpen("logs/messagecomands/"+me.charname+"-lastgame.txt", 0); // open file in read only
if(!grabLastGame){
var grabLastGame = FileOpen("logs/messagecomands/"+me.charname+"-lastgame.txt", 1); // because the file doesn't exist create it
}
if(grabLastGame){
lastGame = grabLastGame.ReadLine(); //retrieve the line and set the lastGame variable to it so we can check it against the game we may want to join
grabLastGame.Close();
}
return;
}
function NT_RetrievenextGame() { // to retrieve game and pw
var grabLine;
var grabNextGame = FileOpen("logs/messagecomands/"+leaderName+"-nextgame.txt", 0); // open file in read only
if(!grabNextGame){
var grabNextGame = FileOpen("logs/messagecomands/"+leaderName+"-nextgame.txt", 1); // because the file doesn't exist create it
}
if(grabNextGame){
grabLine = grabNextGame.ReadLine(); //retrieve the line and set the nextGame variable to it so we can check it against the game we may want to join
game = grabLine.substring(0, grabLine.indexOf('/')); //extracting game name from beginning of line to the "/"
gamepassword = grabLine.substring(grabLine.indexOf('/') + 1, grabLine.length); //Parse after symbol till end of line.
grabNextGame.Close();
}
return;
}
// so now we need to add code to get the next game and pw as well as check it against the last game