D2NT 2.x 버전 이상 for Diablo II 1.12 중상급자를 위한 강좌
분류
봇관련
조회 수
5,278
추천 수
76
Masha。[B.D]
https://tradia.me/diablo2/diablo2_tips/214340
안녕하세요. 허접한 Masha。[B.D]입니다.
저도 봇 만진지는 얼마 안됬고 잘 모르지만..
봇 질문등을 보면서 자주 물어보시는 질문이나.. 팁같은걸 요약해봐야 겠다고 생각이 들어서
조금이라도 도움이 되시는 분들이 있기를 바라며 허접하지만 몇자 적겠습니다 ㅎ.ㅎ;
강좌.. 라기도 모하고.. 그냥 정보입니다.. ㅎ.ㅎ;;;
항상 좋은자료 만들어 주시는 HeavenlyStone님, 날아다녀님, 아가씨님께 감사의 말씀을 드립니다^^;
일단 봇을 처음 접하시는 분이면
anti blue님의 D2NT 2.0.x 버전 이상 for Diablo II 1.12 초보자를 위한 설치강좌
( http://tradia.me/diablo2/diablo2_tips/214526 )
를 먼저 보시기 바랍니다~
틀린 내용이 있을수도 있고 수정해야 될 내용이 있을수도 있습니다.
언제든지 말씀해주세요!
=============================
[개념&봇의 3분류]
일단 봇에 관한 개념부터 말씀드릴께요.
기본적으로 지금 1.12 에서 말하는 봇은 거의 대부분이
HeavenlyStone님이 만들어 주신 D2NT & NTBot 입니다.
HeavenlyStone 님이 만들어 주시는 기본 틀을 가지고
그것을 응용하고 수정하고 고쳐서 새롭게 추가된 버젼을 만들어 주시는 분들이
대표적으로 두루네의 날아다녀님, 인투디아의 Or7r^^l (아가씨님) 이 계시죠~
즉 현재 대부분 쓰이는 봇은
HeavenlyStone 님의 원본 / 날아다녀님의 추가버젼 / 아가씨님의 NaviTriBot
이렇게 크게 3버젼으로 나뉠수 있습니다.
각 3 버젼은 각 제작자님의 개성에 맞게 코드가 수정/추가가 되어있고
장단점이 조금씩 있습니다.
[3버젼의 장단점]
간단하게 각 버젼별로 몇가지 장단점을 말씀드리면...
(제 경험상입니다 ㅠ.ㅠ 에이 저건 아닌데~ 하시면 할말 없습니다 ㅎㅎ)
HeavenlyStone님이 공개하시는것은 기초가 되는 원본으로 기본에 아주 충실하게(-0-!) 되어있고
군더더기가 없습니다. 아쉬운점은 추가기능이 많지는 않습니다^^;
날아다녀님과 아가씨님의 버젼은 헤븐리스톤님의 몸체에 옷을 입혔다고(-_-;;) 보시면됩니다.
기본적으로 우버아이피찾기/각종 스크립트 추가/부가기능 추가/각종버스기능/등등...
이 추가되어있고
날아다녀님은 삥밥스크립과 오리지날 스크립트가 상당히 강점인듯 하고
아가씨님은 장기/트리봇과 확장 스크립트가 상당히 강점인듯 합니다.
(그냥 제 생각일 뿐일뿐 두분것 모두 너무나 잘돌아 갑니다!! )
각각의 버젼은 해당버젼에서 돌아가게 수정되어있기때문에
서로의 스크립트를 복사해서 넣는다고 돌아가지 않습니다.
기능들이 AddOn 처럼 그냥 붇여넣는다고 인식이 되는게 아니란 얘기입니다.
즉
자주 물어보시는 질문을 보면
HeavenlyStone님의 버젼에 우버아이피를 찾으려면 어디서 설정하죠?
날아다녀님 버젼에서 장기는 어떻게 추출하나요?
아가씨님 버젼에서 삥밥설정은 어디서하나요?
이런질문들이 많은데 모든답은 "불가능하다" 입니다.
(정확히 예기하면 불가능한건 아니지만.. 상당한 노력과 시간이 들어가죠 ㅎ)
자세한 기능과 설명서는 대부분 배포하실때 첨부가 되어있거나 파일안에 있으니
참고하시고 정하시는게 좋을듯합니다~
[설정]
기본적으로 3버젼 모두 기본적인 설정은 비슷합니다.
즉 어느정도 기본틀은 똑같고 거기서 조금씩만 다르죠.
(날아다녀님은 초반에 쫄봇/오리스크립트/삥밥스크립트 설정
후반에 크래프트 설정이 있어서 복잡해 보일지 몰라도
기본틀은 똑같습니다~ )
이는 아래 anti blue 님의 글을 보시면 다른버젼도 쉽게 적응하실듯합니다.
[아이템 이니]
2.x 부터 아이템 이니를 구성하는 문법이 바뀌었죠.
기본적으로 보시면 이렇게 나뉘어 져 있는데
나뉘어진 이유는 수정하기 용의하게 편의상 그런거고 그냥 한개의 파일로 통합해도 문제 없습니다.
즉 crafted.nip, keys.nip, rares.nip 등등 내용을 전부 한 파일로 만든다음
케릭이니에서
NTConfig_NIPFilePath.push("통합해버려써.nip")
요렇게 해도 이니는 인식이 되죠.
이 말은 어떤 특정 이니를 추가하고싶을때 아무이니에나 써붇여도 된다는 말도 됩니다 -0-;;
혹은 케릭마다 다르게 설정하고 싶으시면..
예를들면 A햄딘은 으뜸마라만 줍게 하고싶고
B햄딘은 미확마라만 줍게 하고싶을경우
uniques1.nip, uniques2.nip 로 파일을 2개 만드시고 케릭설정에서 바꺼주시면되죠.. (너무당연한가요 ㅋ)
[아이템 이니 수정]
저도 2.x 이상은 수정을 많이 안해봐서.. 자세하게는 설명을 못드리겠네요 ㅎ.ㅎ;;
아이템 이니의 기본적인 틀은
[아이템관련설정] # [옵션]
이런식으로 됩니다.
!= 의 뜻은 '~은 아니다', ==의 뜻은 '~이다(같다)',
접속사로 쓰이는 &&의 뜻은 '그리고~' (영어로 and)
|| 의 뜻은 '혹은~' (영어로 or ) 이 되겠습니다. 요렇게만 알아두시면 수정하는데 아무런 문제가 없습니다.
(사용가능한 모든 부호는
'+', '-', '*', '/', '(', ')', '&&', '||', '>', '>=', '<', '<=', '==', '!=' 요것들입니다.
그냥 수학공식들이랑 거의 같은 역활을 합니다 ㅎ.ㅎ)
앞쪽의 아이템관련 설정에 들어올수 있는건 [Type], [Name], [Quality], [Class], [Level], [Flag] 이고
[Type] 은 서클릿인지, 글러브인지, 벨트인지 등등을 나타내는 종류,
[Name] 은 특정한 아이템의 이름, 즉 Corona, BoneVisage 등등을 지정하고,
[Quality] 는 아이템의 등급, 즉 슈페인지, 노말인지, 레어인지, 크래프트 등등을 나타내고
[Flag] 는 아이템의 에테여부를 나타냅니다.
[Type], [Name] 값들을 목록이 상당히 길기때문에 올려드릴수는 없지만 찾으면 쉽게 나옵니다 ㅎ.ㅎ
[Quality] 의 경우 lowquality, normal, superior, magic, set, rare, unique, crafted 이렇게 8개에서 고르시면되고
[Flag] == etereal 은 에테, [Flag] != etereal 은 에테가 아닌겁니다.
옵션부분의 양은 더욱더 많은데 이건 기본적으로 D2NT/sdk 폴더안에 stats.txt, 등등 을 참고하시면 됩니다.
간단한 설정으로는 (흰여울님 이니로 설명을 드리겠습니다^^;)
으뜸스웹만 물고오는데 100방상 이상 스웹만 물고오게 고치고 싶어요! 하면 uniques.nip을 여시고
[Name] == SpiderwebSash && [Quality] == Unique && [Flag] != ethereal # [EnhancedDefense] >= 120//
부분에서 뒤에 옵션 부분인 120을 100으로 고쳐주시면 됩니다. ㅋ -_-;;
에테도 상관없어요! 하면 [Flag] != ethereal 를 지워주시면 되는데
그 앞에 있는 &&도 같이 지워주셔야 됩니다. 왜냐면..
"이름은 스웹, 그리고 유닉, 그리고 에테는 아닌 종류의 120방상 " 이란 이니를 고치는데
"이름은 스웹, 그리고 유닉, 그리고 종류의 120방상" 이렇게되면 말이 안되겠죠 ㅎ
조금 어려운 이니를 수정하시려면
[Type] == Boots && [Quality] == rare # [FRW] >= 30 && (([FHR] == 10 && [Dexterity] >= 9) || [ItemMagicBonus] >= 25 || [ItemGoldBonus] >= 80) && ([ColdResist]+[LightResist]+[FireResist]+[PoisonResist] >= 90 || ([MaxMana] >= 35 && [ColdResist]+[LightResist]+[FireResist]+[PoisonResist] >= 70)) //
자 레어부츠 이니입니다.
뭔가 복잡해 보여도 하나하나 보시면 크게 어려울껀 없습니다.
"종류는 부츠, 레어이고 옵션은.. 30달려와 [(패힛10과 민9가 붇거나) 혹은 (매찬25나 삥80이 붇거나)] 여기에
(레지합이 90이상이거나 (마나가35이상붇고 레지합이 70이상인)) 걸 물어와라!!!"
로 해석이 되겠죠 ㅋ
(레지합이 20 = 올레5)
뭐가 뭔지 해석만 되면 나머지는 응용이죠~
[일시정지 추가]
날아다녀님과 아가씨님의 버젼에는 기본으로 추가되어있지만
헤븐리스톤님의 버젼에는 일시정지키가 설정이 안되있습니다.
기능을 추가하시려면
D2NT/scripts/libs 폴더안에
common.ntl 파일을 여신후
젤 아래로 가셔서 아래 내용으로 붙여넣으시면됩니다.
//==================================
const _MyFM_KEY_PAUSE = 46; // 일시정지(Delete키)
var _My_PAUSE = false;
RegisterEvent(EVENT_KEYDOWN, My_KeyEvents);
function My_KeyEvents(keyCode)
{
switch(keyCode)
{
case 46:
if(_My_PAUSE)
{
_My_PAUSE = false;
Print("RESUME !!!");
}
else
{
_My_PAUSE = true;
Print("PAUSE !!!");
}
while(_My_PAUSE)
NTC_Delay(250);
break;
}
}
function MyU_ExitGame(delay)
{
if (arguments.length < 1)
delay = 20;
ExitGame();
for (var i = 0; i < delay; i++)
Delay(250);
}
//===============================
[메니저창 수정+게임 메세지창 수정]
일단 메니저에 Status 부분를 수정하는 방법은
NTBotGame.ntj 파일을 여신다음
SendCopyData 로 시작하는 부분을 찾으신후 수정하시면됩니다.
예를들면 사냥터[아이피끝3자리](진행시간) 으로 표시를 하고싶으시면
main() 함수 밖에 var lastIP=0; 을 한줄 넣으시고
lastIP = Number(me.gameserverip.substring(me.gameserverip.lastIndexOf(".") + 1)); //추가
SendCopyData("D2NT Manager", null, (5<<16)|0, NTConfig_Script[CurScriptIndex].substring(2, NTConfig_Script[CurScriptIndex].length-4) + "[" + lastIP + "]"); //수정
으로 해주시면 됩니다. 분명 더 좋은 방법이 있겠지만 전 이렇게 했습니다 -0- ㅠ.ㅠ.ㅠ
날아다녀님의 버전에서는
마찬가지로 NTBotGame.ntj 을 여신다음
중간부분에
.
.
.
NTT_GetCorpses();
NTT_ClearInventory();
NTT_ClearBelt();
MyU_SwitchRunWalk(1);
var lastIP = 0; // 추가
.
.
.
if (MyConfig_ManagerMsg == 1)
{
lastIP = Number(me.gameserverip.substring(me.gameserverip.lastIndexOf(".") + 1));
SendCopyData("D2NT Manager", null, 5<<16, ((_scriptName.length < 11) ? _scriptName : (_scriptName.substring(0, 9) + "...")) + ("[" + lastIP + "]"));
} // 추가+수정
SetStatusText(_scriptName + " ÿc2. o 0");
.
.
.
이런식으로 수정해주시면 Status 창에
NTBaal[207] (3m 12s)
이런식으로 나오게 됩니다.

참고로 위에 SetStatusText(_scriptName + " ÿc2. o 0"); 부분을
SetStatusText(_scriptName + "[" + lastIP + "]" + " ÿc2. o 0");
이렇게 바꺼주시면
게임상 화면위에 나오는 금색박스(-_-;;;;) 에도
사냥터[아이피3자리] 로 나오게 되죠~
=변경전=

=변경후=

진행시간 등등.. 도 응용하시면 됩니다 ㅎ.ㅎ;;;
메니저창의 하단부분 메세지를 수정하는 방법은
NTC_SendLogToOOG 함수를 찾아서 내용을 고치시면 됩니다.
==
[헤븐리스톤님의 2.1 에 사냥터/아이피/시간 추가]
헤번리스톤님의 2.1 버전 메니저에 수정하는 방법은
NTBotGame.ntj 를 여신후
.
.
var CloneDiabloString;
var CloneDiabloNotify = false;
var lastIP=0; // 추가 1
.
.
if(_script.running)
{
_script.Stop();
lastIP = Number(me.gameserverip.substring(me.gameserverip.lastIndexOf(".") + 1)); //추가 2
SendCopyData("D2NT Manager", null, (5<<16)|0, NTConfig_Script[CurScriptIndex].substring(2, NTConfig_Script[CurScriptIndex].length-4) + "[" + lastIP + "]"); // 추가 3
SetStatusText("Stopped " + NTConfig_Script[CurScriptIndex]);
}
else
{
Load("NTBot/bots/" + NTConfig_Script[CurScriptIndex]); //추가 4
lastIP = Number(me.gameserverip.substring(me.gameserverip.lastIndexOf(".") + 1));
SendCopyData("D2NT Manager", null, (5<<16)|0, NTConfig_Script[CurScriptIndex].substring(2, NTConfig_Script[CurScriptIndex].length-4) + "[" + lastIP + "]"); // 추가 5
SetStatusText("Running " + NTConfig_Script[CurScriptIndex]);
}
}
break;
.
.
.
if(++CurScriptIndex < NTConfig_Script.length)
{
NTTM_CheckAct();
Load("NTBot/bots/" + NTConfig_Script[CurScriptIndex]);
lastIP = Number(me.gameserverip.substring(me.gameserverip.lastIndexOf(".") + 1)); //추가 6
SendCopyData("D2NT Manager", null, (5<<16)|0, NTConfig_Script[CurScriptIndex].substring(2, NTConfig_Script[CurScriptIndex].length-4) + "[" + lastIP + "]"); // 추가 7
SetStatusText("Running " + NTConfig_Script[CurScriptIndex]);
}
.
.
.
NTC_SendLogToOOG(NTC_LOG_COMMON, "ÿE00000" + NTConfig_Script[CurScriptIndex] + " : " + msg + " failed (unknown area)");
if(++CurScriptIndex < NTConfig_Script.length)
{
NTTM_CheckAct();
Load("NTBot/bots/" + NTConfig_Script[CurScriptIndex]);
lastIP = Number(me.gameserverip.substring(me.gameserverip.lastIndexOf(".") + 1)); //추가 8
SendCopyData("D2NT Manager", null, (5<<16)|0, NTConfig_Script[CurScriptIndex].substring(2, NTConfig_Script[CurScriptIndex].length-4) + "[" + lastIP + "]"); // 추가 9
SetStatusText("Running " + NTConfig_Script[CurScriptIndex]);
}
.
.
.
이렇게 총 9군데를 추가해주시면 됩니다.
( 더 쉽게 하는 방법도 있겠지만.. 일단 저렇게 하면 되긴 합니다 -0-;;;;;)
[로더로의 활용]
봇은 안돌리고 그냥 멀티로더로 쓰고싶어요~ 하시거나
이리저리 창고정리하거나 할때는
메니저에서 진입점을 공백으로 두시거나
엉뚱한 이름으로 적어주시면 (예: NTBot.ntj 를 NTBot.ntj1로)
그냥 단순 로더로 변신합니다~
[오토맵의 on/off]
방에 입장했을때 맵을 켜거나 끄는걸 설정하는 방법은
각 관련된 스크립트 (NTBotGame.ntj, NTAtuoTeleport.ntj 등등.. ) 에서
SetUIState(0x0C, false); <헤븐리스톤님, 아가씨님버젼>
SetUIState(_MyMI_UI_AUTOMAP, false); <날아다녀님버젼>부분을 true/false 로 조절하실수 있습니다.
[렐따방지]
렐따가 걸리는 제일 큰 이유는 방을 만든후 3분안에 다시 방을 만드는 행위(-_-?) 를 여러번 하면..
아주쉽게 렐따가 걸리죠.
이걸 방지하려면
시간조절을 해주셔야됩니다.
NTBot.ntj 파일에서
var gameMinLength = 180000; // 최소 3분동안 사냥한다는 얘기입니다. 초반에 치킨이 되도 대기실에서 결국
3분 채웁니다.
날아다녀님 버젼은 응답이 없거나 하면 재실행을 하는데
기본은 5초인가 40초인가 그럴껍니다.
만일 5초/40초뒤에 다시 접했는데 방 안만들어지고 케릭따고 그러면
다시 또 나가고, 다시 하고, 렐따걸릴 확률이 있습니다.
이부분은 역시 NTBot.ntj 파일에서
sendEventToOOG(D2NT_MGR_RESTART, "", 몇초);
for(i = 0; i < 10; i++)
Delay(밀리초); 를 수정해주시면 되는데
sendEventToOOG(D2NT_MGR_RESTART, "", 600);
for(i = 0; i < 10; i++)
Delay(600000);
로 하게되면 재시작이 될때 10분후에 다시 시도합니다.
(어떤오류에서 제시작을 하고 대기시간은 입맛에 맞게 찾고 수정하시면됩니다)
[자주하는 질문]
제일 자주 올라오는 질문이
1. Load Config 라고 파랗게 뜨고 인벤에서 막 꺼내서 버려요
2. ntbotgame.ntj (64): ReferenceError: NT_LoadConfig is not defined
뜨고 안되요
3. NTItemparser.ntl (60) : SyntaxError:......
라고 뜨고 멈춰요
이 3가지 입니다.
1번은 케릭명이 정확하지 않아서 설정 케릭 이니를 불러오지 못하기 때문에
그냥 기본설정을 불러온다는 내용이고 그에 따라서 인벤설정에 따라 막 꺼내버릴수도/혹은 마구 보관할수도
있는거죠.. 케릭명을 대소문자 다 확인하시고 설정하시면 되고
2번은 케릭이니 설정에 오타나 잘못된 설정이 있어서 그렇습니다.
젤 자주보는 오타는 false, true 를 flase, ture 이런식으로 오타가 나서.. 에러뿜는 경우가 많으니
하나하나 잘 살펴보시면되고..
3번은 아이템 이니가 잘못되서 그렇습니다.
에러나서 멈췄을때 땅에 뭐가 있는지 보시고 그 해당 아이템을 줍는 이니를 찾으신다음
어디서 오타/설정이 잘못됬는지 고치는 수밖에 없습니다.
=======================================
쓰다보니.. 두서도 없고 이게 과연 도움이 될까 생각도 들고 그러네요.. ㅎ
허접하지만 도움이 되신 분들이 계셨으면 좋겠습니다.
그럼 슝~