[NT봇] IRC 와 연동하기!
분류
봇관련
조회 수
2,254
추천 수
1
안녕하세요 :)
3년간의 눈팅생활을 끝내는 글을 올려봅니다.
두루네 가족분들도 아얄씨를 많이 하시는지는 모르겠지만,
그래도 #두루네 채널이 존재하기 때문에 한번 글을 써봅니다.
제목은 연동이라고 거창하게 표현했지만, 실제로는 연동이기 보다는
봇순이,봇돌이가 물어다 온 아이템을 로그파일에 하나씩 뒤적거리는거보다
아얄씨에서 채팅하다가 아이템이 바로바로 뜨는걸 보기위해서 글만 살짝 전송하게 수정하는 방법입니다.
아직 무언가 꼬여있는듯 하지만 계속 수정하고 있고, 뭐 공개하고 나면 또다른 방법을 가진분들이
나와서 도와주시지 않을까 해서요 ㅎ
사용환경은 mIRC 에 D2BS 코어를 가진 봇이면 되겠습니다~
나름대로 같이 삽질해준 PDE 동생에게
닥치고 군대나 가라는 한마디와 함께 시작하겠습니다 :)
(예제 사진은 클릭해서 봐주셔야 잘 보일겁니다.. 집에는 1280*1024 쓰는데 일부러 1024*768로 찍어놨네요..)
일단 예제 사진입니다
![[NT봇] IRC 와 연동하기! - 1](http://image.durune.com/_data/2008072621304723.jpg)
위에 예제 사진에서 팔라교복을 계~속 주웠다고 뜨는이유는..
잘 모르겠지만 템창이 꽉차면 저런현상이 일어나더라구요... 음... 해결을 못봐서 그냥 패스하기로.... :(
예제 사진을 봤으니 이제 수정을 해봅시다.
일단 자신이 사용 하는 아얄씨로 들어가서 DDE설정을 해주셔야 합니다.
(IRC는 버전상관없이 다 지원합니다. 따로 스크립트를 사용하는 방식이 아니고 데이터만 교환하는 방식..)
알트 + E를 눌러주면 아래와 같은 서버 설정 창이 뜹니다.
![[NT봇] IRC 와 연동하기! - 2](http://image.durune.com/_data/2008072621310687.jpg)
여기서 왼쪽 아래로 쭉~ 가시면 "기타"라는 카테고리가 있는데..
그곳을 클릭하시면 오른쪽에 DDE설정이라는 버튼이 보이실겁니다. 그 버튼을 누르시면
아래와 같은 화면을 보실 수 있습니다.
![[NT봇] IRC 와 연동하기! - 3](http://image.durune.com/_data/2008072621312144.jpg)
여기서 "DDE서버 사용"을 체크하시고, 그 밑에 "서비스 이름" 이름을 mIRC로 설정해주시고,
확인 누르시고~ 확인 누르시고~ 다 되셨으면 아얄씨를 끈후에 다시 켜 주시면 아얄씨쪽은 끝입니다.
그럼 이제 봇 스크립트를 약간 변경시켜 주시면 됩니다.
우선 기본적으로 수정해야 할 파일은 아이템을 주웠다고 로그를 남기는 3가지의 파일을 수정해주시면됩니다.
파일은 /scripts/libs/common/ 에 있는 NTTown.dbl, NTTownManager.dbl, NTSnagIt.dbl 입니다.
세 파일을 여신후에 "Kept"라는 문구로 검색을 하시면 아래와 같은 문구가 보이게 됩니다.
"NTTown.dbl" 의 경우..
if(njipCheckGoodItem(_newitem, NJIP_CHECK_SIMPLE) > 0)
NTC_SendLogToOOG("Kept [" + NTC_ItemQualityToNameList[_newitem.quality] + "] " + _newitem.name);
"NTTownManager.dbl"의 경우... 2가지입니다..
if(njipCheckGoodItem(_items[i], NJIP_CHECK_SIMPLE) > 0)
NTC_SendLogToOOG("in "+ NTConfig_SelectScript +" Kept [" + NTC_ItemQualityToNameList[_items[i].quality] + "] " + _items[i].name);
...
...
if(_result && njipCheckGoodItem(_items[i], NJIP_CHECK_SIMPLE) > 0)
NTC_SendLogToOOG("in "+ NTConfig_SelectScript +" Kept [" + NTC_ItemQualityToNameList[_items[i].quality] + "] " + _items[i].name);
"NTSangIt.dbl"의 경우...
if(_itemunit.itemType != 4 && (_itemunit.itemType < 76 || _itemunit.itemType > 81))
NTC_SendLogToOOG("in "+ NTConfig_SelectScript +" Kept [" + NTC_ItemQualityToNameList[_itemunit.quality] + "] " + _itemunit.name);
이런식의 스크립트 코드를 보게 되시는데, 사실 뭐 거진 비슷합니다..
눈치 빠르신분들은 벌써 이해하셨을텐데, 주웠던(혹은 감정을 했다던가)파일을 피교해서
자신의 이니에 충족하면 NTC_SendLogToOOG함수를 하용해서 D2Manager 프로그램으로 로그를
전송하라는 내용이죠..
자 그럼 여기를 다음과 같이 수정해봅시다..
다 똑같은 방법이므로 "NTTown.dbl"의 경우로만 설명하겠습니다.
일단 if문의 성격상 다음줄만 수행할경우 블럭이 필요없지만 NTC_SendLogToOOG함수 외에
IRC에게 데이터를 전송해야 하기때문에 블럭으로 감싸주셔야합니다.
if(njipCheckGoodItem(_newitem, NJIP_CHECK_SIMPLE) > 0)
NTC_SendLogToOOG("Kept [" + NTC_ItemQualityToNameList[_newitem.quality] + "] " + _newitem.name);
에서
if(njipCheckGoodItem(_newitem, NJIP_CHECK_SIMPLE) > 0)
{
NTC_SendLogToOOG("Kept [" + NTC_ItemQualityToNameList[_newitem.quality] + "] " + _newitem.name);
sendDDE(1, "mIRC", "command", "", "/amsg [4" + me.charname + "1] 득템! [" + NTConfig_SelectScript + "]에서 [" + NTC_ItemQualityToNameList[_newitem.quality] + "] " + _newitem.name);
}
파일마다 _newitem. 이부분 이름이 틀립니다...
NTC_SendLogToOOG 함수를 참조하셔서 적절하게 수정해주시면 됩니다...
08. 07. 27 수정.. : 예제 잘못씀.. -_-
이런식으로 sendDDE함수를 이용해서 아까 활성화한 mIRC DDE로 데이터를 보내는데
아얄씨 명령어 amsg 를 사용해서 [캐릭터이름] 득템 [득템한스크립트의장소]에서 [아이템퀄리티] 아이템이름
의 형식으로 표현하게 하는거죠..
여기서 아까 표현하는 방식 3가지중
특정 채널에만 자신의 득템을 보여주고 싶다고 한다면,
/msg #채널이름 ..... 이런식으로 수정해주시면 되고..
모든 채널에 알려주고 싶다고 한다면,
/amsg ...... 이렇게 수정해주시고,
자신에게만 보여주고 싶다고 한다면,
/echo -a ........ 이렇게 수정해주시면 됩니다...
자 짧으면서 간단한 강좌아닌 강좌였네요..
뭐 덧붙여서 다른방법을 알려드린다면..
default.dbl 의 처음부분에서
NTC_SendLogToOOG("Room : " + me.gamename + " / " + me.gamepassword + " (" + me.gameserverip + ")");
이 부분밑에다가...
var MyUnit = getUnit(0);
sendDDE(1, "mIRC", "command", "", "/echo -a [4" + me.charname + "1] (" + me.gameserverip + ") LV : " + MyUnit.getStat(12) + " / EXP : " + MyUnit.getStat(13) + " / Gold : " + MyUnit.getStat(14) + " + " + MyUnit.getStat(15));
이런 명령어를 추가시켜 준다면
방을 만들어서 들어갔을때 자신에게만 보여주는 메세지로
[Gauguin_SOR] (211.233.16.133) LV : 89 / EXP : 1490661171 / Gold : 0 + 1460820
[계정아이디] (아이피번호) 레벨 / 경험치 / 현재금액 등의 정보를 얻어올 수 있답니다. :)
에~ 그리고~ 여기서 끝나면 재미없죠~
또 그 밑부분에다가...
if(me.gameserverip == "211.233.16.145")
sendDDE(1, "mIRC", "command", "", "/msg #두루네 [4" + me.charname + "1] 흑흑 주인님 저 저주의 145번방이예요.. 곧 팅길거 같아요... 흑흑");
이런식으로 써주시면 공포의 145번방에 봇이 들어갔다는걸 알게되죠... :)
(여기를 잘 수정하면? 우버방 득했을때 멈추게도 할 수 있겠죠!??)
아직 추가로 더 넣을 수 있는 기능이 많은거 같은데 아직 특별히 필요한 부분이 없고,
시간도 없고, 삽질하기도 귀찮고 해서 그냥 지켜보고 있지만, 이정도로 연동이 가능하다는 부분만이라도
알려지게 되면 저 말고도 다른분들이 많은 연구를 하시게 될거라 믿고!
글을 줄이겠습니다 :)
개인적인 질문은 리플보다는 아얄씨에 오셔서.. gauguin`雨 나 PDE 를 찾아주셔요 :)