Installation / Nutzung (sollte klar sein):
- Den runtergeladenen EntryPoint nach YOURBOT/scripts/ kopieren oder verschieben
- Den EntryPoint umbennen, öffnen und die gewünschten Namen eintragen
- Ein Profil im Manager anlegen, den neuen EntryPoint auswählen und starten.
- vor der ersten Anwendung bitte gut durchschütteln
- die Möglichkeit Chars zu permen ist vorhanden
- auch verwendbar um über Nacht MuleAccs anzulegen
- macht biszu 700 Checks/Stunde (geht noch bissl flotter)
- daher bitte nur in gut belüfteten Räumen verwenden
- stoppt wenn alle Plätze belegt bzw. alle Namen geholt wurden
- ToDo: es können bzw. werden keine CDKeys gewechselt
- ToDo: für das Parken fehlt noch eine kleine AntiIdle Funktion
Code://------------------------------------------------------------------------------ // Create Char Settings //------------------------------------------------------------------------------ var Chartype = 0 // Chartypes: 0-Barb(ok), 2-Sorc(ok) !! buggy stuff !! var Charname = [ // List of charnames wich should be checked by the Bot 'Pala','Sorc','Dudu','Barb','Baba','Amma','Assa','Necro','Sumo' ] var Charperm = true; // Without perming, a character will expire after 10 days var Permtime = 10; // Time in minutes to stay ingame with the new character //------------------------------------------------------------------------------ // Delays //------------------------------------------------------------------------------ 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 = 3; // Time in seconds to wait for character screen to appear. var CharacterScreenDelay = 2; // Time in seconds to wait in character screen var PleaseWaitTimeout = 1; // Time in seconds to wait for a please wait popup. Also used as check delay // Control var LoginDelay = 1000; // Time in milliseconds to wait before submitting login information. var LoginTimeout = 5000; // Time in milliseconds to wait for a successfull login 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 in milliseconds to add to a click. var TextDelayRandom = 500; // Random amount of Time in milliseconds to add to a text set. // D2NT Manager Commands 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; Include("libs/controlInfo.ntl"); var ControlData = new controlInfo(); ControlData.ClickDelay = ClickDelay; ControlData.TextDelay = TextDelay; ControlData.ClickDelayRandom = ClickDelayRandom; ControlData.TextDelayRandom = TextDelayRandom; var CharnameC // holds the last checked charname var last_location_id // holds the last status-printed location id var permed = false; // trigger if current charname was in a game function NTMain() { var loop_delay = 100 SetStatusText('ÿc0NTBotCharname ÿc5by Grommel@epvp') try { while( Delay(loop_delay) ) { if( ! me.ingame ) // not in a game NT_LocationAction(ControlData.getLocation()); else if( Charperm ) { permed = true; NT_PermDelay( Permtime * 60 * 1000 ) if( me.ingame ) ExitGame(); } } } catch(err) { SetStatusText('ÿc1Undefined Error (see Common Log)'); NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, err.toString() , 0) NT_SendEventToOOG(D2NT_MGR_RESTART , "" , 3599 ); } } function NT_LocationAction( location ) { if( last_location_id != location.id ) { NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name , 0); last_location_id = location.id } switch(location.id) { case 2: // Waiting In Line case 5: // Join Game case 6: // Ladder case 7: // Channel List case 24: // Server Down - not much to do but wait.. case 22: // Login - Invalid Cdkey (classic or xpac) case 10: // Login Error (this is a fatal error, so stop) // wait here until something changes break; case 3: // Lobby Chat case 1: // Lobby if( permed ){ NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, 'ÿc2Permed '+CharnameC+' successfully', 0) } else { SetStatusText('ÿc3'+CharnameC+'ÿc2 success ') NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, 'ÿc2Reserved '+CharnameC+' successfully', 0) } if( ! Charperm || permed ) { permed = false; ControlData.click(ControlData.controls.lobby.button.quit) break; } _control = ControlData.get(ControlData.controls.lobby.button.create); if(_control && _control.pressed){ ControlData.click(ControlData.controls.lobby.button.join); NT_LocationTimeout(3000, location); // wait 3s for open list } ControlData.click(ControlData.controls.lobby.button.create); break; case 4: // Create Game if(!ControlData.get(ControlData.controls.lobby.create.editBox.gameName)) { ControlData.click(ControlData.controls.lobby.button.join); NT_LocationTimeout(3000, location); // wait 3s for open list if( ! NT_LocationTimeout(5000, location) ) ControlData.click(ControlData.controls.lobby.button.create); } NT_SendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0); NT_LocationTimeout(99000, location ) // waiting for closed create screen for( var x = 0; x < 30; x++ ) // waiting for load screen [undefinied location] if( ControlData.getLocation().id ) Delay(100); break; case 8: // Main Menu if(ControlData.getCurrentRealmIndex() == me.gatewayid) ControlData.click(ControlData.gameTypes[me.playtype]); else ControlData.click(ControlData.controls.mainMenu.button.gateway); break; case 9: // Login if(!NT_LocationTimeout(LoginDelay, location)) { ControlData.setText(ControlData.controls.login.editBox.accountName, me.account); NT_SendEventToOOG(D2NT_MGR_LOGIN, location.name, 0); NT_LocationTimeout(LoginTimeout, location); } break; case 11: // Unable To Connect if(!NT_LocationTimeout(UnableToConnectRetry*60*1000, location)) ControlData.click(ControlData.controls.login.unableToConnect.button.ok); break; case 12: // Character Select - (getting here on temp bann too) SetStatusText('ÿc0'+Charname.length+' Charnames to check') if( ! NT_LocationTimeout(CharacterScreenDelay*1000, location)) { for(var i=0; i<8; i++) { _control = ControlData.get(ControlData.controls.characterSelect.textBox.characterInfo[i]); _text = _control.GetText(); if( _text == null ) break; if( Charname.indexOf(_text[1]) >= 0 ) Charname.splice(Charname.indexOf(_text[1]), 1); } if(Charname.length == 0) { SetStatusText('ÿc2 All Charnames reserved ! ') NT_LocationTimeout(60*1000, location); break; } _control = ControlData.get(ControlData.controls.characterSelect.button.createNew); if(_control && _control.disabled == 4) { SetStatusText('ÿc1 All Charlocations filled ! ') NT_LocationTimeout(60*1000, location); break; } if(_control && _control.disabled == 5) { ControlData.click(ControlData.controls.characterSelect.button.createNew); break; } } break; case 13: // Realm Down - Character Select screen ControlData.click(ControlData.controls.characterSelect.button.exit); NT_LocationTimeout( 10000, location); // Wait until back in Main Menu SetStatusText('ÿc0Waiting RealmDownRetry Time'); NT_LocationTimeout( RealmDownRetry * 60 * 1000 , ControlData.getLocation() ); break; case 14: // Character Select - Disconnected SetStatusText('ÿc0Waiting DisconnectedRetry Time'); if(!NT_LocationTimeout(DisconnectedRetry*60*1000, location)) ControlData.click(ControlData.controls.characterSelect.disconnected.button.ok); break; case 18: // D2 Splash ControlData.click(ControlData.controls.d2Splash.textBox.copyright); break; case 19: // Login - Cdkey In Use SetStatusText('ÿc0Waiting CdKeyInUseRetry Time'); if(CdKeyInUseRetry && !NT_LocationTimeout( 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*1000, location)) ControlData.click(ControlData.controls.mainMenu.connecting.button.cancel); break; case 23: // Character Select - Connecting if(!NT_LocationTimeout(CharacterScreenTimeout*1000, location)) ControlData.click(ControlData.controls.characterSelect.button.exit); break; case 25: // Please Wait ... (CharacterCreateScreen) SetStatusText('ÿc3'+CharnameC+'ÿc0 waiting ...') if( ! NT_LocationTimeout( PleaseWaitTimeout* 1000, location)) { SetStatusText('ÿc3'+CharnameC+'ÿc0 create failed '); ControlData.click(ControlData.controls.lobby.pleaseWait.button.cancel); } break; case 27: // Gateway Select ControlData.clickRealmEntry(me.gatewayid); ControlData.click(ControlData.controls.gateway.button.ok); break; case 29: // Create Character CharnameC = Charname.shift(); Charname.push(CharnameC); SetStatusText('ÿc3'+CharnameC+'ÿc0 checking ...') ControlData.click(ControlData.controls.characterCreate.chars[Chartype]); ControlData.setText(ControlData.controls.characterCreate.editBox.charName, CharnameC); if(ControlData.getLocation().id == 29) // if we are still in same location after delay ControlData.click(ControlData.controls.characterCreate.button.ok,0,0,1); break; } } function NT_SendEventToOOG(locationId, statusString, pendingTime) { return SendCopyData('D2NT Manager', null, (locationId<<16)|pendingTime, statusString); } function NT_LocationTimeout(time, location) { var _endtime = GetTickCount() + time; while(ControlData.getLocation().id == location.id && _endtime > GetTickCount() ) { NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + ' [' + parseInt((_endtime - GetTickCount())/1000) + 's]', 0); Delay(100); } return (ControlData.getLocation().id != location.id); } function NT_PermDelay(time) { var _endtime = GetTickCount() + time; while( me.ingame &&_endtime > GetTickCount() ) { SetStatusText('ÿc3'+CharnameC+'ÿc0 perming ...[' + parseInt((_endtime - GetTickCount())/1000) + 's]') NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, 'Perming [' + parseInt((_endtime - GetTickCount())/1000) + 's]', 0); Delay(500) // Anti Idle here } }