대기열이 줄어들지 않고 로비에서 대기만하는 경우 해결해 봅시다.
분류
봇관련
조회 수
5,101
추천 수
31
※ 현재 날아다녀님께서 이 문제로 인한 무한대기현상이 발생하지 않도록 보완한 19차버젼을 자료실에 업로드 하셨습니다.
아래 글은 18차 버젼을 기준으로 작성하였습니다. 이 방법이 조금 어려우신분들은 19차버젼을 사용하시면 위 문제를 해결하실수 있습니다.
요즘 대기열이 심상치 않죠
우버이벤등등으로 저는 대기열이 10000이 넘어간 경우도 요즘 보이네요.
이런 대기열이 방이 만들어 질때는 팍팍! 줄어들어 만들어지다가 한참 봇이 돌아가다보면
어느순간 방은 안만들어지고 대기열은 1이라도 줄어들 생각을 안하고 로비에서 대기만 할때가 있습니다.
대기열이 전혀 줄어들지 않고 계속 매니져창에는 로비에서 대기중이라며 시간 카운트만 열심히 새고 로그에는 방 만들기 시도만 잔뜩... 있죠.
이럴때는 보통 중지를 눌렀다 다시 실행을 누르면(재 로그인) 해결되는 경우가 많은데요. 이걸 모니터링하면서 계속 해주기란
여간 귀찮은게 아니겠죠.
날아다녀님 18차기준으로 설명하겠습니다.(19차테스트버젼은 이 문제가 해결됬다죠...)
지금 19차 테스트버젼을 사용하시는 분도 아마 계시겠지만 위 문제를 해결 하려고 18차에서 19차로 다시 넘어 가려면 이것저것 다시
손봐주기 귀찮은분들이 저를 포함해 많이 계실거라 생각하고 적어보겠습니다.
19차 테스트버젼에 scripts폴더안의 NTBot.ntj파일을 그대로 18차로 옮기면 오류가 나는것을 확인 했습니다.
그래서 18차 scripts폴더안의 NTBot.ntj파일을 수정해 보았는데요.
먼저 18차 원본 NTBot.ntj파일을 열어보시면 209번째 줄부터 230번째 줄에 아래와 같은 if문이 보이실겁니다.
if (_MyOtC_CheckCreateGame[0] && _MyOtC_CheckCreateGame.length > 2)
{
checkCreateGame.index++;
if (_MyOtC_CheckCreateGame[1])
sendEventToOOG(D2NT_MGR_PRINT_LOG, "ÿc1대기 중 (" + checkCreateGame.index + "번째 게임 참가 실패)", 0);
checkCreateGame.count = (checkCreateGame.count < (_MyOtC_CheckCreateGame.length - 1)) ? (checkCreateGame.count + 1) : 2;
for (var i = 1; i <= _MyOtC_CheckCreateGame[checkCreateGame.count]; i++)
{
sendEventToOOG(D2NT_MGR_PRINT_STATUS, "대기 중 (" + i + "/" + _MyOtC_CheckCreateGame[checkCreateGame.count] + "초)", 0);
if ((i % 10) == 0 && location.id == 3)
Say("Create Game (" + i + "/" + _MyOtC_CheckCreateGame[checkCreateGame.count] + "s)");
if (me.account == _MyWKC_WarehouseKeeperMode && My_File("NTBot/MyData/WarehouseKeeper/WarehouseKeeperJoin.txt", 0))
break;
Delay(1000);
}
}
이 부분이 scripts\NTBot\MyConfigs 폴더안의 Other.ntl파일의 var _MyOtC_CheckCreateGame을 담당하는 부분으로 보이네요.
위 if문을 19차테스트 버젼에 있는 아래 구문으로 바꿔봤습니다.
if (_MyOtC_CheckCreateGame[0] && _MyOtC_CheckCreateGame.length > 2)
{
checkCreateGame.index++;
if (_MyOtC_CheckCreateGame[1])
sendEventToOOG(D2NT_MGR_PRINT_LOG, "ÿc1대기 중 (" + checkCreateGame.index + "번째 게임 참가 실패)", 0);
checkCreateGame.count = (checkCreateGame.count < (_MyOtC_CheckCreateGame.length - 1)) ? (checkCreateGame.count + 1) : 2;
if (_MyOtC_CheckCreateGame[checkCreateGame.count] > 0)
{
for (var i = 1; i <= _MyOtC_CheckCreateGame[checkCreateGame.count]; i++)
{
sendEventToOOG(D2NT_MGR_PRINT_STATUS, "대기 중 (" + i + "/" + _MyOtC_CheckCreateGame[checkCreateGame.count] + "초)", 0);
if ((i % 10) == 0 && location.id == 3)
Say("[Countdown] " + i + " / " + _MyOtC_CheckCreateGame[checkCreateGame.count] + "s");
if (me.account == _MyWKC_WarehouseKeeperMode && My_File("NTBot/MyData/WarehouseKeeper/WarehouseKeeperJoin.txt", 0)[0])
break;
Delay(1000);
}
}
else if (_MyOtC_CheckCreateGame[checkCreateGame.count] < 0)
{
sendEventToOOG(D2NT_MGR_PRINT_LOG, "ÿc1재실행 (게임 참가 실패)", 0);
sendEventToOOG(D2NT_MGR_RESTART, "", -_MyOtC_CheckCreateGame[checkCreateGame.count]);
My_Delay();
}
}
이제 봐꿨으니 설정을 해봐야 겠죠.
scripts\NTBot\MyConfigs폴더안에 Other.ntl파일을 열어보시면
var _MyOtC_CheckCreateGame = [true, false, 숫자, 숫자, 숫자];부분이 보이네요.
이 설정은 19차 주석을 확인해 보면
// 게임 참가 실패 시 대기 하기 = [사용 여부, 게임 참가 실패 메시지 출력하기, 실패 횟수 별 대기 시간(초) . . .] * 주의: 실패 횟수 별 대기 시간을 0보다 작게 설정하면 멀티로더를 종료한 후 대기합니다. 예로 -30초로 설정했다면 멀티로더 종료 후 30초간 대기합니다. * 참고: 실패 횟수별 대기 시간은 설정한 실패 횟수를 초과하거나 멀티로더가 재실행되면 처음부터 다시 적용됩니다.
그렇죠. 아주 깔끔하고 명쾌하고 완벽하며 사랑스러운 주석이 되겠습니다.
저는 수정한 18차 버젼이 이 주석대로 작동 하는지 확인하기 위해 간단한 테스트를 해봤습니다.
var _MyOtC_CheckCreateGame = [true, false, -30]; 이렇게 설정하고는
NTbot.ntj파일에서
var createGameThreshold = 10000; // 게임 만드는 과정마다 추가 시간(1/1000초)
var waitInLineTimeout = 2000; // 게임 만들기 창에서의 대기 시간(1/1000초)
이렇게 하면 2초동안 방을 못만들면 로비에서 10초간 대기후 디아창은 꺼지고 매니저에서는 재시작(30초)란 글이 뜨겠죠.
(※수정합니다. 방만들기를 한번 실패하면 게임최소시간(var gameMinLength)에 설정한 시간만큼 로비에서 한번 대기후 다시 방을 만듭니다.)
확인결과는 성공이네요.
현재는
var createGameThreshold = 30000; // 게임 만드는 과정마다 추가 시간(1/1000초)
var waitInLineTimeout = 50000; // 게임 만들기 창에서의 대기 시간(1/1000초)
var _MyOtC_CheckCreateGame = [true, false, 10, 30, -30];
이렇게 설정하고 돌리고 있습니다. 5시간채 안돌아가서 로비무한대기가 종종 생기던 제 직원들이 현재 8시간째
로비 무한대기현상은 없습니다. 알아서 재시작을 간간히 해주네요.
이제 로비 무한대기는 저랑 모르는 사이에요...