Skip to content
봇관련다크 모드

nt봇 로비에러 해결~ㅋ

조회 수
5,073
추천 수
39
등록일


+++++++++++++++++++++++++++
<디아블러네님의 글 中>
* 로비버그? D2메니져 상엔 in game 상태이나 로비에서 대기하는 버그
* in game버그 ? 방 입장 후 20분 동안 스크립트 수행을 하지 않는 버그

많은 분들이 이제 로비에러 0이라 하시니 로비에러는 확실히 줄었다고 생각되는군요ㅎ
2일간 테스트후 이곳에 올리고 다시 2일이 지나서 총 4일간 테스트..
로비에러는 한번도 나지 않았습니다 각 시스템에 따라 차이가 있겠지만 그건 자신의 시스템에 맞게 시간을 조절하는걸로
해결이 될듯 하군요

현재 제가 쓰고있는 버전에대한 쪽지가 많은 관계로(플러그인 보내달라거나..)
이전까지 쪽지주신 분들께는 개인적으로 몇분 보내드리긴 했습니다만...
제 맘대로 남의자료를 함부로 보내고 하는건 좀 그렇기도하고 저도 너무 손이 많이 가는지라...(저도 이제 게임조금 할께요 ㅎ)
쪽지는 이제부터 받지 않겠습니다.. 죄송합니다(_ _)a
+++++++++++++++++++++++++++


예전 mmbot전성기일때 활동하던 dud입니다.. 머 저 아는사람은 없을듯하네요 ㅎㅎ
워낙 눈팅 유저라.. ㅎㅎ
누군가 해결하신분이있는데 제가 뒷북 치는것일지 모르지만 그래도 시작해 볼께요

우선 제 nt봇 버전을 말씀드리자면
이곳에서 다운받은
nt봇 D2BS 0.9.0.4 버전을 쓰고있습니다
시작한지 얼마 안되어서 헬포지 러쉬용 케릭하나 키우려고 오리소소부터 키우기 시작했는데요
현재 오리에서 돌리고는 있지만 머 확장이나 오리나
이 문제 해결하는건 같으니 상관없습니다

아무튼 테스트해본 결과 47시간동안 인게임 에러는 한번도 안나오네요ㅎㅎ

머 서두는 여기까지 하고

nt봇의 기본적인 스크립트에 대한 이해는 모두들 하고있는것으로 추정하고 본론부터 바로 들어가겠습니다

우선 스크립트 폴더 안에 있는 starter.dbj파일을 메모장이나 에디트 플러스등으로 편집을 합니다

그럼
123번째 라인 즈음 부터 아레와 같은 내용이 나오게 되는데요
switch(lastGameStatus)
 {
 case 0:
 controlData.click(controlData.controls.lobby.button.join);
 delay(100);
 controlData.click(controlData.controls.lobby.button.create);
 nextGameMake = getTickCount() + createGameTimeout; // set our timeout
 sendEventToOOG(127, location.name, 0);
 break;

이건 로비에서 크리에이트 게임을 할경우에 우선 JOIN버튼 한번 클릭후 0.1초 있다가
CREATE를 클릭후 바로 방제 입력하고 방을 만들게 되는 스크립트인데요
여기서
1. controlData.click(controlData.controls.lobby.button.join); 이내용을 삭제하거나 주석 처리해주세요
2. delay(100); 여기의 100을 1000정도로 늘려주시구요
3. controlData.click(controlData.controls.lobby.button.create); 의 다음 줄에 delay(1000);을 추가해주세요
위와 같이 바꾼이유는 우선 제가 볼때 조인 클릭하는건 인게임 에러에 아무런 효과도 없습니다..
대신 방을 빠져 나와서 1초간 기다렸다가 크리에이트 버튼을 클릭하고 1초간 기다렸다가 방제와 비번을 입력하고 방을 만들게 하도록 바꾼것입니다
로비에서 방을 조금 천천히 만들도록한것이죠

5. 같은 파일의 76번째 라인 즈음 부터 다음과 같은 내용이 있을 것입니다
sendEventToOOG(65535, "Maximum game length reached!", 65535);
quit();
이 코드 바로 다음에 delay(2000); 를 추가해 줍니다
이건 제한시간이 다되어서 로비로 나왔을때 2초간 대기하도록 한것입니다

자 이건 진짜 해결된 코드로 고치기위한 준비에 불과하구요(이렇게만한다고 해결되지 않습니다)

6. 이코드를 넣고 인게임 에러가 하나도 안생기게 되었는데요 방법은 이렇습니다(제일 간단합니다)
이 파일의 메인함수 안에 다음과 같은 코드가 있을꺼에요
locationAction(controlData.getLocation());
이걸 분석해보면 이건 현재 케릭이 어디에 있는지를 검사하고 각 위치마다 서로 다른 동작을 하도록 하는 함수입니다
이코드 바로 위에 delay(500);를 추가해 줍니다

이렇게 바꾼이유는 메인함수 전체를 분석해보면 케릭이 방에 있지 않을때 _ingame을 false로 바꾸고
locationAction(controlData.getLocation())이 함수를 불러오는 건데요
케릭이 방에서 나가는 순간 케릭의 현재 위치를 너무 빨리 검사한 나머지 메니져는 케릭이 방에서 나오지 않은걸로 체크 했지만 게임상으로는 로비로 빠져나오는 상황이 만들어 질수 있을듯하더라고요

그래서 locationAction(controlData.getLocation());이 코드 위에 딜레이를 0.5초 정도 주어서 조금 천천히 검사하도록 바꾼거죠

그 이후로는 인게임에러 전혀 없네요

이렇게 다 고처진 소스는 아레와 같습니다

생략.....
function main()
{
 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(getTickCount()-lastGameMade < gameMaxLength)
 {
 if(!_ingame)
 {
 _ingame = true;

 sendEventToOOG(126, "In Game", parseInt(gameMinLength/1000));
 lastGameStatus = 2; // in game successful
 }

 delay(1000);
 }
 else
 {
 sendEventToOOG(65535, "Maximum game length reached!", 65535);
 quit();
 delay(2000); //<----********고친부분*******

 while(me.ingame)
 delay(500);
 }
 }
 else
 {
 if(_ingame)
 _ingame = false;

 delay(500); //<----********고친부분******* 이부분이 제일 중요!!!!!!!!!!!!!!!!!!!!!!!
 locationAction(controlData.getLocation());

 delay(500);
 }
 }
}

function locationAction(location)
{
 switch(location.id)
 {
 case 3: // Lobby Chat
 if(!chatActionsDone)
 {
 chatActionsDone = true;
 delay(rnd(waitInChatBeforeActionsMin, waitInChatBeforeActionsMax));

 if(joinRandomChannel || joinChannelInChat != "")
 {
 say("/join " + (joinRandomChannel ? getRandomString(rnd(3,10)) : joinChannelInChat));
 delay(1000);
 }
 }
 case 1: // Lobby
 if(location.id == 1 && joinChatAfterGame)
 {
 delay(rnd(waitBeforeEnterChatMin, waitBeforeEnterChatMax));
 controlData.click(controlData.controls.lobby.button.enterChat);
 break;
 }

 if(getTickCount() > nextGameMake)
 {
 lastGameFailed = false;

 switch(lastGameStatus)
 {
 case 0:
  delay(1000); //<----********고친부분*******(수정)
 controlData.click(controlData.controls.lobby.button.create);
 delay(1000); //<----********고친부분*******

 nextGameMake = getTickCount() + createGameTimeout; // set our timeout
 sendEventToOOG(127, 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(127, location.name, 0);
 break;
 }
 }
 else
 {
 locationTimeout(nextGameMake-getTickCount(), location);
 }
 break;
생략.........

고수님들 해보시고 해결되셨다 싶으시면 다시 정리해서 올려주시면 감사하겠습니다 (_ _)
제가 말주변이 없다보니 제대로 이해하셨나 몰겠네요.. ㅠㅠ
그럼 성공하시길 빌어요~!!!!!

============================================================
http://tradia.me/diablo2/download/41454
플러그인폴더 통으로 올리려했지만 디아블러네님 조언에따라 스타터파일만 올렸습니다~!!

위 소스 수정된걸로 올렸으니 참고하세요

============================================================

[TEST REPORT]
제 사랑스런 오리래더 봇순이들 두 마리와 d2매니저 단체 사진입니다ㅎㅎ
한마리는 50방을 도는동안 리스타트 4번
한마리는 44방을 도는동안 리스타트 8번
(20방에 한번씩 시디키 교체로 인하여 리스타트를 하기때문에 2를 빼면)
각 2번과 6번이 리스타트가 생겼고
이중 로비에러에 인한 리스타트는 둘다 0번
헤이가이즈에러에 인한 리스타트는 각 2번과 6번입니다..

nt봇 로비에러 해결~ㅋ - 1
댓글 110
  • 댓글 #192961

    D2BS 0.9.0.4 예전에받아놓은게있었네여.. D2BS 0.9.0.2 버전에 D2BS.dll 교체하면되는건가여.. 디아실행시 0.9.0.3 으로나오네여 예전에는 0.9.0.2였는데 일단 D2BS.dll , starter 파일 교체하고 테스트 중입니다..
  • 댓글 #192964

    감사합니다~ 이전것도 잘되던데 수정파일도 잘쓰겠습니다~~~~~
  • 댓글 #192967

    에고 제 컴이 안좋다보니 이것도 별 효과는 없네요.. 나가면서 순간 엄청난 렉이 발생해서 몇초간 정지가 되면서 나가더니 인게임 뜨네요... 램 480 이라서 ... ;; 그래도 좋은 정보 감사합니다.^^
  • 댓글 #192970

    철수와박은혜// 게임을 나가는동안 순간렉이 엄청 발생하신다면 sendEventToOOG(65535, "Maximum game length reached!", 65535); quit(); delay(2000); 이부분의 2000값을 더 크게 잡아보세요 순간렉으로 멈춰있는 시간을 어림잡아 계산하셔서 그보다 좀더 크게 잡으시면 될듯하네요
  • 댓글 #192976

    dnd님 인철님 몇일자 버전 쓰시는지 알수 있을까요 ^^; D@BS-M @ d2manager 합본 버전 쓰시는건가요?
  • 댓글 #192979

    위에 부분 고쳐주시구요 default.dbj파일 여셔서 보시면 main함수 제일 끝에 quit(); 아는 코드가있습니다 그 바로아레에도 delay(2000); 를 추가해주세요 이것도 마찬가지로 위에 고쳤더 ㄴ시간으로 늘려주시고요
  • 댓글 #192982

    위에처럼한건 사냥코스를 다돌고 게임을 종료하거나 최대시간이 넘어서 게임을 종료할때 딜레이준 시간만큼 기다리도록 한것입니다 치킨으로 종료햇을때도 저걸 넣어주면 좋을듯한데 어디인지 찾기가 힘드네요 ㅎㅎ
  • 댓글 #192985

    무한능력™//ㅎㅎ 인철님 080725버전이며 제 닉은 dnd가 아니라 dud입니다ㅎㅎ
  • 댓글 #192988

    -_-;; 죄송합니다.. 감사히 쓰겠습니다. 확실히 지금 10방뿐이 안돌렸지만 너무 마음에 드네요 감사합니다 ^^;; dud님
  • 댓글 #192991

    와 감격 제봇이 방금 돌덩이를 하나 물어왔네요 아 감격.. 3일간 에러잡는다고 고생한 보람이있네요 ㅋㅋ
  • 댓글 #192994

    dnd ㅋㅋㅋ 귓말 차단 dud님 정확히 어떤 nt봇을 받으셨나요?(자료실 게시물 번호라도..) 같은 환경에서 해보고 싶습니다.
  • 댓글 #192997

    인철님께서 예전에 올리셨던 080725일자 버전의 nt봇입니다 현재는 드루네 자료실에서는 찾아볼수 없는자료로 생각됩니다 자삭하고 떠나셨다고 하시더군요 또한 자신의 자료 이곳에 올라오는것도 꺼려하신다고 하니 여기선 찾아보기 힘들듯함니다.. 그러나 저와 똑같은 환경이 아니더라도 소스코드 어느정도 보실줄 아신다면 이 해결방법의 중요한 팁은 1. 로비에서 크리에이트 버튼을 누르기 전과 후에 1초의 딜레이를 주고 2. 최대게임시간이 지나서 종료시킬때도 quit();함수 바로 다음에 2초이상 딜레이 3. locationAction(controlData.getLocation()); <<--이함수 호출 직전에 0.5초 딜레이를 주는것 입니다 추가로 게임 종료할때 렉이좀 심하시다면 2번에대한 사항의 딜레이를 늘려주시고 default.dbj 파일에 main함수 마지막에있는 quit(); 바로 다음에 2번과 같은 딜레이를 주는것입니다 이게 전부에요 ㅎㅎ
  • 댓글 #193000

    dud님 controlData.click(controlData.controls.lobby.button.create);앞뒤에 delay(1000);를 추가하라고 하셨는데요... 단순히 delay(1000); controlData.click(controlData.controls.lobby.button.create); delay(1000); 하면 되나요?...제가 잘몰라서....혹시 다른 기호( { )라도 넣어야 하는지...답변 부탁드립니다...
  • 댓글 #193003

    뱃쌀식용유님 만약 if(생략) function1(); 이런 코드가있을때 이 if문에 걸렸을때 수행할 동작을 추가하고 싶다면 if(생략) { function1(); function2(); } 이렇게 바꾸어 주어야 합니다 중괄호를 넣지 않는 경우는 if문이나 while문 안쪽의 코드가 한줄로 되어있을때만 가능하고 두줄 이상일때에는 중괄호를 넣어서 if문이 참일때 수행할수 있는 문장이 어디서부터 어디까지인지를 표시해주는 중괄호를 넣어야 하는거죠.. 님소스는 제가볼때 Speedful님의 소스와 동일한듯 합니다 Speedful님의 댓글을 찾아보시고 그 아레쪽에 제 댓글을 봐주세요
  • 댓글 #193006

    이참에 c언어나 java를 한번 공부해 보시는것도 나쁘지 않다고 생각되네요 프로그래밍의 기본적인 골격구조만 알아도 nt봇 소스 코드를 직접 수정하는데 문제가 없을듯해요
  • 댓글 #193009

    jsp 같은 언어들이 정말 가독성이 뛰어나기때문에.. 기본적인것들만 알고있으면 아 이부분이 무슨역할을 하는구나 라는게 눈에 들어올꺼에요 ㅎㅎ
  • 댓글 #193012

    네...ㅜㅜ..dud님 말대로 다시 공부해서 해봐야 겠네요...프로그램에 "프"짜도 모르는지라..ㅜㅜ 암튼 답변 감사합니다....^^
  • 댓글 #193018

    오... 오늘 써봣는데 렉이 좀 많을때 말곤 리스타트가 거의 없습니다. 굿굿굿
  • 댓글 #193021

    확실히 인게임 여부 조사를 천천히 해서 그런지 세 방에 한 번은 나던 로비에러가 열 다섯 방정도 지나도 0번이군요. 만족스럽네요~
  • 댓글 #193024

    ㅎㅎ 그럼 다행이네요 로비 에러만 확실히 없어진다면 리슷좀생기는거야 커버하고도 남죠 ㅎㅎ
  • 댓글 #193027

    좋은 자료 감사합니다. (--)(__) 현재 2시간째 테스트중인데, 로비 에러가 없네요~ 평균 60~70% 발생하던 리스탓이 50% 정도로 감소한 것 같습니다. 계속 모니터링 할께요^^
  • 댓글 #193030

    0905 쓰고 있구요 100방 남짓 모니터링 한 결과 로비에러 전혀없습니다 ..최고입니다...
  • 댓글 #193033

    저도 로비에서 암짓 안하는 문제때문에 한창 고생중인데 좋은 자료 너무 감사합니다.
  • 댓글 #193036

    리스타트를 줄일 수 있는 좋은 팁이 되겠네요.. 어차피 리스타트를 막기란 어려운거니까요.. we've got a big error here라든지 이유없이 경고음을 내며 종료되는 문제 등 로더에러가 있는한 리스타트를 0으로 만들기는 불가능하다고 봅니다.
  • 댓글 #193045

    dud 님 스타터 파일에 맥시멈 시간과 최소시간 설정은 몇초로 하셧는지요?? 맥시멈과 최소시간 이내에 방에서 빠져나오면 무조건 인게임 뜨네요..;
  • 댓글 #193048

    철수와박은혜 //님 다시한번 확인 부탁드려요 원래 최소시간 설정 이전에 봇이 로비로 빠져나오게되면 스크립트상 최소시간 ㅡ 방에있던시간 만큼 대기함니다 안그러면 연속으로 치킨되었을시에 렐따나 방따위 위험이있기때문이죠 전 최소시간을 185초(3분5초)로 했고 최대시간을 600초(10분)으로 설정해놨습니다 그렇기때문에 그건 로비에러가 아니라 렐따 방지하기위해서 기다리는 거죠 최소시간은 3분5초(기본설정)를 권장합니다 방만드는 간격이 3분이상될대 렐따가 안걸리거든요 님께서 다시한번 확인해보시면 로비에러는 메니져에 IN GAME(~~s) 이렇게되어있지만 케릭은 로비에 있는상태이고 정상적인 상태는 Lobby(~~s) 이렇게 되어있을거에요
  • 댓글 #193051

    어우 아1 오리 레더 소순이 두마리돌리고있는데 어제오늘 하루에 하나씩 돌덩이 물어오네요ㅎㅎ 방금도 로그 확인해 봤더니 돌덩이 하나 주워놨다고 게록해 놨네요 ㅎㅎㅎ
  • 댓글 #193054

    아무래도 방에서 빠져나가면서 순간 게임이 정지 (렉) 이 생기는것 같더군요 그래서 봇은 분명 나갔는데 캐릭은 방에 있으니까 로비에는 있으면서 인게임이 뜨는게 아닐까 싶네요... 어떻게 수정하면 될지 조언좀 해주세요.^^ 감은 오는데 뭔가 아닌듯한...
  • 댓글 #193057

    철수와박은혜//그 순간렉에 대해서는 위쪽에 댓글 해놨는데 보셨나요?? 확실하게 된다고는 장담 못하지만 어느정도 효과는 있을거로 생각되네요^^
  • 댓글 #193060

    철수와박은혜// 6. 이코드를 넣고 인게임 에러가 하나도 안생기게 되었는데요 방법은 이렇습니다(제일 간단합니다) 이 파일의 메인함수 안에 다음과 같은 코드가 있을꺼에요 locationAction(controlData.getLocation()); 이걸 분석해보면 이건 현재 케릭이 어디에 있는지를 검사하고 각 위치마다 서로 다른 동작을 하도록 하는 함수입니다 이코드 바로 위에 delay(500);를 추가해 줍니다 부분을 잘 읽어보세요. 순간렉이 좀 길다싶으면delay를 늘려주셔도 됩니다. 전 1000ms로 했구요.
  • 댓글 #193063

    아무래도 전 해결된거 같아요. 강추 드려야할듯.. 좋은 정보주셔서 고맙습니다.
  • 댓글 #193069

    ㅎㅎ 너무 칭찬들을 해주시니 어찌할줄 모르겠네요~ 감사함니다^^
  • 댓글 #193072

    기존에 리슷률이 5:1에서 8:1 정도였는데 8캐릭 지금 바꾸고 쓰니 20:1 정도 나오네요 후후 짱입니다 ^^
  • 댓글 #193075

    dud님의 스타터 파일로 교체후 제 봇 상황 92반 2리슷 85방 5리슷 88방 4리슷 3캐릭입니다 dud님 완전사랑합니다
  • 댓글 #193078

    사.. 사랑까지야..ㅎㅎ 잘되신다니 저도 만족스럽네요ㅎㅎ 원래는 이 팁을 올릴까 말까 계속 고민하다 (괜히 잘못되면 되돌아올 것들이 무서워 잘 안나서는 편이거든요 ㅎ) 그냥 혼자만 알기 아까워서 올린건데요멀..ㅎ
  • 댓글 #193081

    매니저상에 보이는 로그에 앞에 시간표시가 깨져 나오는건 왜그런건가요. 해결방법이 있나요..
  • 댓글 #193087

    저는 로비에러 저주에 걸렸나보군요;; 한방돌다가 로비에러.. 또 다른부분 수정해야하나요?^^..
  • 댓글 #193090

    안녕놔의솨뢍// 흠... 6. 이코드를 넣고 인게임 에러가 하나도 안생기게 되었는데요 방법은 이렇습니다(제일 간단합니다) 이 파일의 메인함수 안에 다음과 같은 코드가 있을꺼에요 locationAction(controlData.getLocation()); 이걸 분석해보면 이건 현재 케릭이 어디에 있는지를 검사하고 각 위치마다 서로 다른 동작을 하도록 하는 함수입니다 이코드 바로 위에 delay(500);를 추가해 줍니다 이부분에서 500준부분을 조금씩 늘려서 한번 테스트해보세요 1000로 주고 테스트한번해보세요
  • 댓글 #193093

    한번 해보고 결과 말씀드릴게요^^ 일일이 댓글달기 힘드실텐데 좋은일하시네요^^... 감사합니다~
  • 댓글 #193096

    500 넣고 했는데 로비대기 에러...1000넣고 실험 시작 해봅니다 ^^
  • 댓글 #193099

    뭐가 문제인지.... 0903k 쓰고 있구 스타터파일만 dud님이 업로드해주신걸로 바꾼후..locationAction(controlData.getLocation()); 아래위로 delay(1000); 해도 로비대기 에러가....생기네요.. 다른분들은 잘만 된다는데 ㅠㅠ 1400까지 올려도 똑같구.. 0904 0905로 바꾸면 잘되려나요..흑흑
  • 댓글 #193102

    이공.. 안되시나요?ㅠㅠ 흠 어떤상황에서 안되시는지 예를들어 치킨되연 로비에러가 생긴다던가 그냥 정상죵료인데도 로비에러가 생긴다던가.. 그런걸 한번 말씀해주세요 흠..봇돌일때 렉은 없으신가요?
  • 댓글 #193105

    앗 DUD님 시간을 늘리고 쪼이고 하니깐 지금 정상 작동하고있어요!! 지금 모니터 중인데 15방째 로비대기 없네요 ^^ 정말 감사합니다 ~~~ sendEventToOOG(65535, "Maximum game length reached!", 65535); quit(); delay(2000); <-- 이부분을 3000 으로 했구요 delay(1000); //<---- 이부분을 1500 controlData.click(controlData.controls.lobby.button.create); delay(1000); //<---- 이부분을 1500 하니깐 잘되네요 저는 ^^
권한이 없습니다.
다크 모드