Skip to content
봇관련다크 모드

D2NT 1.9.1 and NTBot 3.8.1에 네비기능 추가하기

조회 수
2,618
추천 수
24
등록일

이번에 HeavenlyStone님께서 업데이트 해주신 D2NT 1.9.1 and NTBot 3.8.1 for Diablo II 1.12버젼에서 2d모드 전체화면팅김버그가 수정됬습니다.
그래서 전체화면 모드로 즐기면서 네비기능도 같이 사용하면 더 좋을거 같아 수정해 봤습니다.

이 글은 최신 D2NT 1.9.1 and NTBot 3.8.1 for Diablo II 1.12 에 Or7r^^I님의 네비기능을 추가하는 방법입니다.
오로지 네비기능(퀘스트지역으로 이동, 다음웨이포인트로 이동)을 추가할 목적으로 수정했으며 clear position기능 작동까지는 확인했습니다.
Or7r^^I님 자료의 다른 기능을 사용하고싶으신분은 직접 수정하시거나 다른자료를 이용하시면 되겠습니다.


혹시나 이글이 문제가 된다면 삭제하겠습니다.



우선 HeavenlyStone님의 D2NT 1.9.1 and NTBot 3.8.1 for Diablo II 1.12와
http://tradia.me/diablo2/download/67053


Or7r^^I님의 네비+봇 [D2NT 1.8.3 and NTBot 3.7.3]를 준비합니다.
http://www.durune.com/2010/zboard.php?id=d2mpds&page=2&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=1391

Download #1번 파일을 기준으로 작성했습니다.



네비D2NT 1.8.3에서 D2NT 1.9.1로 우선 복사할 파일들 입니다.
두 버젼이 경로가 조금씩 다르지만 폴더를 한번 뒤져보시면 바로 알수 있습니다.

scripts폴더안에 NTNavi.ntj, NTNaviGame.ntj 2개파일을 복사해 붙여넣습니다.
bots폴더안의 NTNavigation.ntj파일을 1.9.1의 NTBos/bots폴더안에 복사해 붙여넣습니다.
libs/config폴더 안의 NTConfig_Navigation.ntl, NTFunctionKey_Navigation.ntl, ItemsManagerSettings.ntl 3개 파일을
NTBot/char_configs폴더안에 복사해 붙여넣습니다.
NTBot/tools폴더안에 NTNToolsThread.ntj파일을 복사해 붙여넣습니다.



폴더추가

scripts폴더안에 ItemLogFile폴더를 추가합니다.

기타 로그폴더들은 한폴더안에 모아주는게 편하겠죠.

예를들어 NTBot폴더안에 Log폴더를 만들어 그안에 여러 로그폴더들을 만들어 스크립트에 경로를 수정해 주시면 되겠습니다.
ex) "NTBot/Log/Data/....."


아래는 스크립트파일 수정내용입니다.


NTNavi.ntj파일
------------------------------------------------------------------------------------------------------------------------------------------------
Include("controlInfo.ntl");

이 부분의 경로 앞에 libs경로를 추가해 줍니다.
-> Include("libs/controlInfo.ntl");



맨 아랫부분에 경로 수정할 부분이 2곳 보이는 군요.

if(_fileHandle = FileOpen("libs/config/Data/GameName.txt", _mode))
이 부분도 원하시는 폴더를 만든후에
-> if(_fileHandle = FileOpen("만든폴더경로/Data/GameName.txt", _mode))
------------------------------------------------------------------------------------------------------------------------------------------------

NTNaviGame.ntj파일
------------------------------------------------------------------------------------------------------------------------------------------------
Include("config/NTFunctionKey_Navigation.ntl");
수정 -> Include("NTBot/char_configs/NTFunctionKey_Navigation.ntl");

Include("common/NTCommon.ntl");
수정 -> Include("libs/common/NTCommon.ntl");

NTSI_LoadNIPFiles();
수정 -> NTSI_LoadNIPFiles("NTBot/item_configs");

Load("tools/NTNToolsThread.ntj");
수정 -> Load("NTBot/tools/NTNToolsThread.ntj");

아래부터
Load("...")부분들 모두 경로 수정
수정-> Load("NTBot/bots/" + NTConfig_Script.......

if(_fileHandle = FileOpen("libs/config/Data/CommandFile[" +_player + "].txt", 1))
수정-> if(_fileHandle = FileOpen("만든폴더경로/Data/CommandFile[" +_player + "].txt", 1))

바로아래함수도 동일합니다.
------------------------------------------------------------------------------------------------------------------------------------------------

NTBot/char_configs폴더안의 NTConfig_Navigation.ntl파일
------------------------------------------------------------------------------------------------------------------------------------------------
Include("config/NTConfig.ntl"); -> 삭제


NTConfig_BeltColMin[0] = 4;
NTConfig_BeltColMin[1] = 4;
NTConfig_BeltColMin[2] = 0;
NTConfig_BeltColMin[3] = 0;

모두 주석처리->
/*
NTConfig_BeltColMin[0] = 4;
NTConfig_BeltColMin[1] = 4;
NTConfig_BeltColMin[2] = 0;
NTConfig_BeltColMin[3] = 0;
*/
------------------------------------------------------------------------------------------------------------------------------------------------

NTBot/bots폴더안의 NTNavigation.ntj파일
------------------------------------------------------------------------------------------------------------------------------------------------
맨처음부분
Include("config/ItemsManagerSettings.ntl");
Include("config/NTFunctionKey_Navigation.ntl");
수정->
Include("NTBot/char_configs/ItemsManagerSettings.ntl");
Include("NTBot/char_configs/NTFunctionKey_Navigation.ntl");


Include("common/NTCommon.ntl");
수정->Include("libs/common/NTCommon.ntl");

NTSI_LoadNIPFiles();
수정-> NTSI_LoadNIPFiles("NTBot/item_configs");


if(_fileHandle = FileOpen("libs/config/Data/CommandFile[" +_player + "].txt", _mode))
수정-> if(_fileHandle = FileOpen("만든폴더경로/Data/CommandFile[" +_player + "].txt", _mode))

if(_fileHandle = FileOpen("libs/config/Data/CommandFile[Common].txt", _mode))
수정-> if(_fileHandle = FileOpen("만든폴더경로/Data/CommandFile[Common].txt", _mode))

NTC_CheckBeltPotion(); -> 찾아서 모두 주석처리
------------------------------------------------------------------------------------------------------------------------------------------------

NTBot/tools폴더안의 NTNToolsThread.ntj파일
------------------------------------------------------------------------------------------------------------------------------------------------
Include("common/NTCommon.ntl");
수정->Include("libs/common/NTCommon.ntl");
------------------------------------------------------------------------------------------------------------------------------------------------

libs/common폴더안의 NTCommon.ntl파일
------------------------------------------------------------------------------------------------------------------------------------------------
아래는 네비안의 NTCommon.ntl파일의 내용을 약간 수정한 내용입니다. function NTC_IncludeConfig(filepath) 함수대신 추가해 주세요.
(function NTC_IncludeConfig(filepath) 함수 전체를 삭제하시거나 주석처리해주세요.)

function NTC_IncludeConfig(_navigation)
{
 var _configname;
 var _configfile;

 if(arguments.length < 1)
 _navigation = false;

 if(_navigation)
 _configname = "NTConfig_Navigation.ntl"
 else
 {
 switch(me.classid)
 {
 case NTC_CHAR_CLASS_AMAZON:
 _configname = "NTConfig_Amazon_" + me.charname + ".ntl"
 break;

 case NTC_CHAR_CLASS_SORCERESS:
 _configname = "NTConfig_Sorceress_" + me.charname + ".ntl"
 break;

 case NTC_CHAR_CLASS_NECROMANCER:
 _configname = "NTConfig_Necromancer_" + me.charname + ".ntl"
 break;

 case NTC_CHAR_CLASS_PALADIN:
 _configname = "NTConfig_Paladin_" + me.charname + ".ntl"
 break;

 case NTC_CHAR_CLASS_BARBARIAN:
 _configname = "NTConfig_Barbarian_" + me.charname + ".ntl"
 break;

 case NTC_CHAR_CLASS_DRUID:
 _configname = "NTConfig_Druid_" + me.charname + ".ntl"
 break;

 case NTC_CHAR_CLASS_ASSASSIN:
 _configname = "NTConfig_Assassin_" + me.charname + ".ntl"
 break;
 }
 }

 _configfile = FileOpen("NTBot/char_configs/" + _configname, 0);

 if(_configfile)
 _configfile.Close();
 else
 Print("ÿc1Can't find " + _configname);

 Include("NTBot/char_configs/NTConfig.ntl");
 Include("NTBot/char_configs/" + _configname);

}
------------------------------------------------------------------------------------------------------------------------------------------------

NTBot폴더안의 NTBotGame.ntj파일
------------------------------------------------------------------------------------------------------------------------------------------------
NTC_IncludeConfig("NTBot/char_configs");
수정 -> NTC_IncludeConfig();
------------------------------------------------------------------------------------------------------------------------------------------------

libs/common폴더안의 NTMove.ntl파일
------------------------------------------------------------------------------------------------------------------------------------------------
아래함수 추가

function NTM_MoveToObject(areaid, unittype, low, high, offsetx, offsety, clearpath)
{
 var _unit;

 if(arguments.length < 4)
 high = low;

 if(arguments.length < 5)
 {
 offsetx = 0;
 offsety = 0;
 }

 if(arguments.length < 7)
 clearpath = false;

 _unit = GetPresetUnits(areaid, unittype);

 if(!_unit)
 return false;

 for(var i = 0 ; i < _unit.length ; i++)
 {
 if(_unit[i].id >= low && _unit[i].id <= high)
 return NTM_MoveTo(areaid, _unit[i].roomx*5+_unit[i].x+offsetx, _unit[i].roomy*5+_unit[i].y+offsety, 3, clearpath);
 }

 return false;
}


아래함수 추가
function NTM_GetStairsInt(lo, hi, area)
{
 var _tile = NTC_GetUnit(NTC_UNIT_TILE);

 if(_tile)
 {
 do
 {
 if(_tile.classid >= lo && _tile.classid <= hi)
 {
 if(!area || _tile.areaid == area)
 return _tile;
 }
 } while(_tile.GetNext());
 }

 return false;
}

아래함수 추가

function NTM_TakeStairs(low, high, area)
{
 var _unit;
 var _prearea;

 if(arguments.length < 3)
 area = me.areaid;

 if(arguments.length < 2)
 _unit = NTC_GetUnit(NTC_UNIT_OBJECT, low);
 else
 _unit = NTM_GetStairsInt(low, high, area);

 if(!_unit)
 return false;

 _prearea = me.areaid;

 for(var i = 0 ; i < 30 ; i++)
 {
 if((i % 10) == 0)
 {
 if(NTM_GetCloserInt(_unit))
 NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _unit);
 }

 NTC_Delay(100);

 if(me.areaid != _prearea)
 break;
 }

 while(me.areaid == 0)
 NTC_Delay(100);

 if(me.areaid == _prearea)
 return false;

 NTC_PingDelay(NTConfig_AreaDelay);

 return true;
}
------------------------------------------------------------------------------------------------------------------------------------------------


여기까지 입니다.
시작지점을 NTBot.ntj로 설정했을때 캐릭설정파일 추가시 기본 봇기능 작동까지는 확인 했습니다.
NTcommon.ntl파일 수정으로 캐릭설정파일에 기존버젼(d2nt1.8이하버젼)처럼 캐릭터명을 정확히 써줘야 합니다.

끝에 이 말을 빼먹었군요.;
HeavenlyStone님, Or7r^^I, 그리고 날아다녀님, 디아블러네님 그 외 모든분들 항상 감사합니다.
덕분에 즐겁게 디아를 즐기고 있습니다. ^^


댓글 17
  • 댓글 #210607

    이렇게 보니깐 정말 HeavenlyStone님, Or7r^^I, 그리고 날아다녀님, 디아블러네님의 공이 너무나도 크네요^^ 저는 다 만들어놓으시면 그냥 쓰는게 좀 죄송하다는 생각도드네요.ㅠㅠ
  • 댓글 #210610

    NTBotGame.ntj : NTC_IncludeConfig() failed 이런 메시지를 출력하면서 방에 머무르지 않습니다. 도무지 어디를 수정해야 할지 모르겠네요.;
  • 댓글 #210613

    NTBotGame.ntj파일과 NTCommon.ntl파일 제대로 수정하셨는지 한번 확인 해 보세요.
  • 댓글 #210616

    음.. 나름 확인 열심히 해보고 있는거랑 조합도 해보고 했는데 잘 안되던데요. 더구나 botgame파일은 수정할 부분이 하나뿐이고; common은 복사 붙여넣기만 하면 되지 않습니까;;
  • 댓글 #210619

    NTCommon.ntl에 기존 function NTC_IncludeConfig 함수는 주석처리 해주셔야 합니다.
  • 댓글 #210622

    지금 편집(수정) 중입니다. 위의 내용중 NTBot폴더안의 NTBotGame.ntj파일 ------------------------------------------------------------------------------------------------------------------------------------------------ NTC_IncludeConfig("NTBot/char_configs"); 수정 -> NTC_IncludeConfig(); ------------------------------------------------------------------------------------------------------------------------------------------------ 위의 내용이 맞는 건가요? 소스중에 function NTC_IncludeConfig(_navigation) 인데요 매개변수가 _navigation로 잡혀 있는데 수정 -> NTC_IncludeConfig(); 매개변수가 빠져 있는데 맞는 건가요?
  • 댓글 #210625

    저도 프로그래밍의 '프'자도 잘 모르는지라 아는부분까지만 설명해보겠습니다.;; 밑에 보시면 if(arguments.length < 1) _navigation = false; 로 되어 있습니다. NTC_IncludeConfig(); 이면 arguments.length가 0 이고 NTC_IncludeConfig(true); 이면 arguments.length가 1이 됩니다. 이 부분은 Bot게시판에 Or7r^^I님께서 직접 댓글로 설명해 주셨던 부분입니다.^^; NTC_IncludeConfig();로 되어 있으면 _navigation = false;가 되어 네비설정파일을 읽지 않고 아래 else쪽의 캐릭터 설정파일을 읽습니다. 위와 동일하게 설정했을때 아직 오류메시지는 확인하지 못했습니다.^^;
  • 댓글 #210628

    답변 정말로 고맙습니다. 위의 설명 이해했습니다. 지금 사무실이라 집에서 테스트 해 보겠습니다. 좋은 자료 감사 합니다. 즐거운 하루 되세요..
  • 댓글 #210631

    도움되셨다니 다행입니다. 하지만 자료는 제 것이 아니라 HeavenlyStone님, Or7r^^I님 것이라 제가 감사하다는 말을 들으면 안될거 같습니다. ^^;
  • 댓글 #210634

    1.9에서 리슷이 줄었다니 함 시도해보고 싶네용... 자료 감사합니다 ^ ^
  • 댓글 #210637

    혹시나 해서 댓글 남겨 봅니다. 적용하다가 사냥터 스크립트 로드할때 자꾸 벨트설정이라던지 기타등등이 자꾸 NTConfig_Navigation.ntl파일에 설정한 대로 적용 될경우 사냥터 스크립트파일을 열어서 NTC_IncludeConfig("NTBot/char_configs);를 NTC_IncludeConfig(); 로 수정해 주시던가 NTcommon.ntl파일에서 캐릭설정파일 로드하는 방법을 살짝 봐꿔주시면 되겠습니다. 별로 신경안쓰고 쓰다가 이제야 발견하게 됬네요. ^^;
  • 댓글 #210640

    봇 생초보들은 이글보고 하다가 화딱지만 나겠네.. ^^ 이 부분도 원하시는 폴더를 만든후에 -> if(_fileHandle = FileOpen("만든폴더경로/Data/GameName.txt", _mode)) ==> 대체 만든폴더경로가 어디라는건지..???????? 뭘 만든폴더라는?????? 예라도 들어주셨으면 좋으련만..
  • 댓글 #210643

    if(_fileHandle = FileOpen("libs/config/Data/CommandFile[" +_player + "].txt", 1)) 수정-> if(_fileHandle = FileOpen("만든폴더경로/Data/CommandFile[" +_player + "].txt", 1)) 바로아래함수도 동일합니다. ===> 만든폴더경로 앞에서 뭔지도 몰라서 짜증나고있는데.. 바로아래함수는 뭘말하는건지 참......... ??? 갈수록 햇갈리게 어영부영알려주시면 뭐.. 에휴.. 난 그냥 허접이라 원본받아서 써야겠네..
  • 댓글 #210646

    댓글을 좀 늦게 확인했네요. 죄송합니다. 위에 보시면 ------ 기타 로그폴더들은 한폴더안에 모아주는게 편하겠죠. 예를들어 NTBot폴더안에 Log폴더를 만들어 그안에 여러 로그폴더들을 만들어 스크립트에 경로를 수정해 주시면 되겠습니다. ex) "NTBot/Log/Data/....." ------ 라고 적혀 있습니다. 그러니까 예를 들어 수정-> if(_fileHandle = FileOpen("만든폴더경로/Data/CommandFile[" +_player + "].txt", 1)) 부분의 경우 원하시는 위치에 폴더를 만드시고 "만든폴더경로" 부분에 폴더 경로를 적어주시면 됩니다. 저 같은 경우는 NTBot폴더 안에 Log라는 폴더를 만들어서 수정-> if(_fileHandle = FileOpen("NTBot/Log/Data/CommandFile[" +_player + "].txt", 1)) 로 수정해서 사용하고 있습니다. 이 글은 아가씨님 자료가 1.9.1에 적용된 버젼이 없었을때(다른사이트는 확인해 보지 못했었습니다.) 작성했습니다. 자료가 있으시다면 굳이 이글보고 수정을 안하셔두 될거 같습니다. ^^;
  • 댓글 #210649

    감사합니다. 덕분에 좋은 기능을 신버전에서도 쓸 수 있게 됐네요.
권한이 없습니다.
다크 모드