Skip to content
봇관련다크 모드

스크립트별로 완료 시간 로그에 기록하기[수정]

조회 수
1,134
추천 수
8
등록일

먼저 로그 내용을 파일로 저장할 수 있는 방법을 알려주신 디아블러네님에게 감사를 전합니다.

defaut.ntj의 내용에 몇 줄을 추가하면 스크립트를 완료하는데 걸린 시간을 저장할 수 있읍니다. 이렇게 시간을 기록하면 아템 픽업 장소도 자동으로 알 수 있고 치킨된 스크립트도 알 수 있기에 나름대로 도움이 될 것이라 생각합니다.

먼저 config/NTConfig.ntl을 열어서 파일의 맨 뒤에 디음처럼 변수 지정을 삽입합니다.

var my_starttime; // 추가
var my_endtime; // 추가
var my_scriptstarttime; // 추가
var my_scriptendtime; // 추가
....

그리고

default.ntj 파일을 열어서 함수 NTMain() 안에 다음 부분을 찾아

 NT_LoadConfig();
 NTSI_LoadNIPFiles();

 my_starttime = GetTickCount(); // 추가

 if(NTConfig_StartDelay > 0);
 NTC_Delay(NTConfig_StartDelay);

게임 시작 시간을 변수에 저장합니다. 그런 다음 NTMain() 함수 끝부분에 게임 완료 시간을 변수로 저장해서 로그에 보냅니다.

 my_endtime = GetTickCount(); // 추가
 NTC_SendLogToOOG("Game is completed in " + ((my_endtime-my_starttime)/1000) + " seconds" ); // i added // 추가
 
 ExitGame();
}

다음 스크립트 완료 시간을 기록하기 위해서는 스크립트 시작 시간을 변수로 저장하여야 합니다.

일단 첫 스크립트의 시작은 NTMain() 함수 안에 있으니 NTMain() 함수에서 다음 부분을 찾아 추가 합니다.

 Load("bots/" + NTConfig_Script[CurScriptIndex]);
 my_scriptstarttime = GetTickCount(); // 추가

스크립트의 완료는 NT_ScriptEvents(msg) 함수 안에 정의되어 있으므로 이 함수를 찾아 다음과 같이 추가합니다.

 case "SCRIPT_END":
 my_scriptendtime = GetTickCount(); // 추가
 NTC_SendLogToOOG("Script [" + NTConfig_Script[CurScriptIndex] + "] in " + ((my_scriptendtime-
my_scriptstarttime)/1000) + " seconds" ); // 추가
 if(++CurScriptIndex < NTConfig_Script.length)
 {
 NTTM_CheckAct();
 Load("bots/" + NTConfig_Script[CurScriptIndex]);
 my_scriptstarttime = GetTickCount(); // 추가
 }
 else
 LastScript = true;
 break;

즉 SCRIPT_END 메세지가 오면 스크립트가 완료된 것이므로 그 때 시간을 변수로 저장하고 스크립트 시작 시간을 빼서 로그에 기록합니다.

치킨이 있는 경우에는 스크립트가 완료된 것이 아니기 때문에 로그에 완료시간이 기록된 마지막 스크립트 다음 스크립트에서 치킨된 것이겠죠.

별 건 아니지만 두루네 식구 여러분께 도움이 되었으면 합니다.

===1/29 추가===

봇을 여러 개 돌릴 경우 스크립트 완료 시간이 한 로그 파일에 기록되면 다소 보는데 불편할 수 있어서 봇마다 다른 로그 파일을 사용하는게 좋습니다.

이 밑은 디아블러네님의 로그파일 기록 수정 내용 중 약간의 수정을 가한 것입니다.

원 수정 내용에서

function NTC_SendLogToOOG(logString)
{
 
 var _file
 var _logs;
 _file=FileOpen("logs["+GetDate('-')+"].txt",2); ----> 바꿀 줄
 _logs="["+ me.charname +" "+GetDate('/')+" "+GetTime()+"]"+logString; ---> 바꿀 줄
 _file.WriteLine(_logs);
 _file.Close();
return SendCopyData("D2NT Manager", null, 10<<16, logString);
}

표시한 두 줄을 다음처럼 바꿉니다.

 _file=FileOpen(me.charname + "_"+GetDate('_')+".txt",2);
 _logs="["+ GetTime()+"] "+logString;

그러면 봇마다 다른 이름의 로그 파일이 만들어져서 로그 기록을 살펴보는데 편리합니다.
댓글 4
  • 댓글 #202637

    이거 참 면목이 없네요. 저는 봇을 하나만 돌리기 때문에 문제가 없었는데, 여러 봇을 돌리는 경우에는 default.ntj가 여러번 실행되어서 변수값이 계속 바뀐다는걸 몰랐읍니다. 따라서 여러 봇을 돌릴 때는 시간이 엉망이 되네요. 제대로 디버깅없이 글을 올려서 죄송합니다.
  • 댓글 #202640

    봇을 두개 돌려서 해 본 결과 변수를 캐릭 컨피그 파일 안으로 이동하면 각 캐릭마다 변수가 설정되어 올바르게 시간 기록이 됩니다. 본문에서 변수 설정한 부분인 var my_starttime; // 추가 var my_endtime; // 추가 var my_scriptstarttime; // 추가 var my_scriptendtime; // 추가 이 부분을 캐릭의 컨피그 파일 가장 앞에 붙여넣고 default.ntj 안에서는 삭제합니다.
  • 댓글 #202643

    와우 뒤늣게 알았지만 정말 좋은 자료네요. 아템 주운 장소까지 더불어 알게 해주니 좋네요 ^^ 잘쓰겠습니다. 추천!!!
권한이 없습니다.
다크 모드