nt봇 로비에러 해결~ㅋ
분류
봇관련
조회 수
4,985
추천 수
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번입니다..
