쫄봇 텔레보내서 자동 퀘드랍 사냥 - 디아봇 개조 예제(날아다녀님 2차)
분류
봇관련
조회 수
6,194
추천 수
42
쫄봇 텔레보내서 자동 퀘드랍 사냥 - 디아봇 개조 예제
업데이트
*********************************************************
4.29.
- 게임 시작 딜레이를 설정 할 필요 없도록 방법을 바꾸었습니다. (3.4.5 번 )
새 방식에는 NTConfig_StartDelay = 0;으로 하세요.
- 8. 방잡이 쫄 치킨 시 따라 나가기 / 추가
5.13
- 디아 잡기전에 쫄 대기 위치로 보내기 추가 (7-2)
---------------------------------------------------------------------------------------------------
NT3.1_NTBot4.2_2 (날아다녀님 2차 수정 버젼)
지난 글과 관련하여 쫄봇을 이용한 퀘드롭 및 텔레 보내고 협동하여 자동 사냥하는 방법입니다.
전체적인 시퀀스는 다음과 같습니다.
A. 함성 해줄 바바가 방 만든다.
B. 기사(퀘드롭 된 팔라딘 등) 조인
C. 텔레 소서 조인
D. 파티 후 리버웨이에서 함성 받기
E. 텔레 소서 카오스 중앙으로 텔레
F. 기사가 쫄들과 함께 사냥
*****************************************************************************************
0. 숙련자가 아닌 경우, 원본 클린 설치 후 수정하십시오.
****************************************************************************************
1. 로더 진입점 - 모두 NTbot.ntj
****************************************************************************************
2. NTBot.ntj 설정
쫄봇 사용시의 통상의 경우와 반대입니다. 잘 확인하세요.
// 쫄봇
//=====================================
leechBotMasterAccount = "A 방 만드는 캐릭(함성 바바)의 계정명"; //
leechBotMasterIsAuto = true; //
// 쫄 계정이름 설정하기
//----------------------
leechBotLeechAccountList.push("B 기사 계정명");
leechBotLeechAccountList.push("C 텔레 소서 계정명");
*****************************************************************************************
3. scripts\NTBot\char_configs\NTConfig.ntl
//주의********* 캐릭명 대소문자 구분, 오타 꼭 확인하세요.
//-------- 이하 추가
var MyConfig_LeechBotAutoMaster = "기사 명";
var MyConfig_LeechBotTeleeName = "텔레소서 캐릭명";
var MyConfig_LeechBotWarcryName = "함성바바 캐릭명";
var MyConfig_LeechBotGameMaker = "방 만들 캐릭명";
//-------- 이상
*****************************************************************************************
4. 캐릭별 설정( \scripts\NTBot\char_configs\NTConfig_클래스_캐릭명.ntl )
0) 공통
// 기타 옵션 설정하기
//===========================================================
NTConfig_PublicMode = true;
1) 기사 캐릭
NTConfig_Script.push("MyLeechBotMaster.ntj"); // 쫄봇(기사) * 참고: "scripts/NTBot/MyConfigs/Key.ntl"에서 명령키를 설정합니다.
MyConfig_LeechBot = 2; // 쫄 인원수 = 0: 기사를 직접할 경우/ 1 이상: 기사가 봇일 경우
MyConfig_LeechBotWait = 60; // 쫄 기다릴 최대 시간(초)
// 간혹 NTConfig_Script.push("MyWarcries.ntj");NTConfig_Script.push("MyQueDrop.ntj");
// NTConfig_Script.push("MyDiaRunMaster.ntj"); 등을 주석 해제하신 분들이 있는데, 하면 안됩니다.
//그 다음 원하는 앵벌 코스를 통상의 쫄봇기사 설정 그대로 합니다.
// 다음은 NTDiablo.ntj 를 예로 합니다.
NTConfig_Script.push("NTDiablo.ntj"); // 액트 4: 불길의 강으로 이동 -> 카오스 생츄어리로 이동 -> 씨일 열고 소환 몬스터 사냥 -> 디아블로 사냥
MyConfig_DiabloClear = [false, false, true, 0x01]; // [웨이포인트부터 입구까지, 입구부터 중앙까지, 중앙부터 디아블로 잡을 때까지, 사냥할 몬스터 종류]
MyConfig_DiabloInventory = false; // 디아블로 잡기 전 인벤토리에 있는 아이템 정리하기
MyConfig_DiabloLeechBot = 2; // 0: 사용 안함/ 1: 쫄봇(멈춤)/ 2: 쫄봇(움직임)
MyConfig_DiabloPotion = [0, 0]; // 포션 사 먹기 = [해독포션, 해빙포션]
MyConfig_DiabloHelp = 0; // 채팅으로 "ㄷ", "h", "H"를 외치면 해당 플레이어 주위 몬스터 잡아 주기 = 잡아 줄 횟수
MyConfig_DiabloMessage = [false, "다음 방으로 갑니다!"]; // [사냥 후 메시지 보내기, "보낼 메시지(특수 문자 "%G"는 "XXX-번호" 형식의 다음 방 제목/ 보낼 메시지를 여러 개 설정하면 무작위로 하나 선택)" . . .]
2) 방 만드는 캐릭(함성 바바)
//NTConfig_Script.push("MyLeechBotMaster.ntj");
NTConfig_Script.push("MyLeechBot.ntj"); // 쫄봇(쫄)
MyConfig_LeechBotItem = true; // 방 입장 후 아이템 등 정리하기
MyConfig_LeechBotDistance = [10, 20]; // 기사와의 간격 = [최소, 최대]
MyConfig_LeechBotAttack = [25, 300]; // 몬스터 잡기 = [몬스터와의 간격, 공격 시간(1/1000초) 간격]
MyConfig_LeechBotPick = 2000; // 아이템 줍기 = 확인 시간(1/1000초) 간격
MyConfig_LeechBotTeleport = false; // 텔레포트 사용하기
MyConfig_LeechBotPrecast = [1000, 1, 1, false, 0, 0]; // [프리캐스트 시간(1/1000초) 간격, 배틀 오더스, 샤우트, 네크로맨서 소환 스펠, 네크로맨서 저주, 팔라딘 오라]
MyConfig_LeechBotMerc = 2000; // 용병 살리기 = 확인 시간(1/1000초) 간격
MyConfig_LeechBotMaster = ""; // 방에 있는 특정 캐릭터를 기사로 설정하기 = "기사가 될 캐릭터이름"
3) 플라이 소서
//NTConfig_Script.push("MyLeechBotMaster.ntj");
NTConfig_Script.push("MyLeechBot.ntj"); // 쫄봇(쫄)
MyConfig_LeechBotItem = true; // 방 입장 후 아이템 등 정리하기
MyConfig_LeechBotDistance = [10, 20]; // 기사와의 간격 = [최소, 최대]
MyConfig_LeechBotAttack = [25, 300]; // 몬스터 잡기 = [몬스터와의 간격, 공격 시간(1/1000초) 간격]
MyConfig_LeechBotPick = 2000; // 아이템 줍기 = 확인 시간(1/1000초) 간격
MyConfig_LeechBotTeleport = true; // 텔레포트 사용하기
MyConfig_LeechBotPrecast = [1000, 1, 1, false, 0, 0]; // [프리캐스트 시간(1/1000초) 간격, 배틀 오더스, 샤우트, 네크로맨서 소환 스펠, 네크로맨서 저주, 팔라딘 오라]
MyConfig_LeechBotMerc = 2000; // 용병 살리기 = 확인 시간(1/1000초) 간격
MyConfig_LeechBotMaster = ""; // 방에 있는 특정 캐릭터를 기사로 설정하기 = "기사가 될 캐릭터이름"
*****************************************************************************************
5. \scripts\NTBot\bots\MyLeechBot.ntj
function MyMain()
{
LeechBotHelpMsg = -1;
var i;
var _portal;
var _playerMaster, _unitMaster;
var _attackCount, _pickCount, _precastCount, _mercCount, _errorCount;
var _myExperience, _experience, _lastExperience;
var _preAreaId, _preX, _preY;
var _prePlayer = new Array(3);
var _result;
//-------------------------------------------------------->TT_mod
if (me.charname == MyConfig_LeechBotGameMaker)
MyIL_File("NTBot/MyData/LeechBot/LeechBotMasterName.txt", 1, MyConfig_LeechBotAutoMaster)
//Load("NTBot/tools/NTToolsThread_MyLeechBot.ntj");
//<-------------------------------------------------------TT_mod
if (!MyConfig_LeechBotMaster)
{
for (i = 1; i <= 10; i++)
{
StatusText[0] == 1 && MyCo_SetStatusText("ÿc4기사의 이름 확인 중 (ÿc0" + i + "ÿc4/10초)");
_MyL_MasterName = MyIL_File("NTBot/MyData/LeechBot/LeechBotMasterName.txt", 0);
if (_MyL_MasterName)
break;
Delay(1000);
}
if (!_MyL_MasterName)
MyCo_ExitGame("ÿc1MyLeechBot.ntj : 기사의 이름 확인 실패 (" + MyCo_GetAreaName() + ")");
}
else
_MyL_MasterName = MyConfig_LeechBotMaster;
for (i = 1; i <= 30; i++)
{
StatusText[0] == 1 && MyCo_SetStatusText("ÿc4기사와 파티 맺는 중 (ÿc0" + i + "ÿc4/30초)");
_playerMaster = MyLB_CheckLeechBotParty(_MyL_MasterName);
if (_playerMaster)
break;
Delay(1000);
}
//-------------------------------------------------------->TT_mod
Load("NTBot/tools/NTToolsThread_MyLeechBot.ntj");
//<--------------------------------------------------------TT_mod
*****************************************************************************************
6. \scripts\NTBot\bots\MyLeechBot.ntj
function MyL_CheckMessageAuto()
{
var _msg = MyL_ReadMessage();
if (_msg && _msg != _MyL_Message)
{
var _result = _msg.split("/");
if (_result.length < 3)
{
switch (_result[1])
{
//-------------------------------------->TT_mod 추가
case "BO": // 함성 하기
if (me.charname == MyConfig_LeechBotWarcryName)
{
NTC_SwapWeapons(1) // 2번 무기 슬롯을 이용할 경우
while (!NTC_CastSkill(155, NTC_HAND_RIGHT))
Delay(10)
while (!NTC_CastSkill(138, NTC_HAND_RIGHT))
Delay(10)
while (!NTC_CastSkill(149, NTC_HAND_RIGHT))
Delay(10)
NTC_SwapWeapons(0);
MyLB_WriteMessage(_MyL_Message);
}
break;
case "CHAOS": // 카오스 중앙으로 이동(텔레)
if (me.charname == MyConfig_LeechBotTeleeName)
{
if( MyMo_MoveTo(108, 7792 + 10, 5292 - 4) )
{
if (NTTM_CheckAct(4))
MyL_WriteMessage("1");
}
}
break;
//<---------------------------------------------TT_mod
// case "CHAOS":
// 에서 이동방법이나 좌표는 MyAutoTeleport.ntj 를 참고하면 됩니다.
// -------> function MyAT_카오스_생츄어리() 내 이동 방법 참고
// 이 외에도 모든 사냥터의 좌표를 알 수 있습니다.
*****************************************************************************************
7. \scripts\NTBot\bots\NTDiablo.ntj
function MyMain()
{
if (MyConfig_DiabloLeechBot != 0)
MyLB_WriteMessage("ACT4");
MyVi_TownManager();
if (MyConfig_DiabloPotion[0] > 0) MyVi_BuyItem(514, MyConfig_DiabloPotion[0], 2, true);
if (MyConfig_DiabloPotion[1] > 0) MyVi_BuyItem(517, MyConfig_DiabloPotion[1], 2, true);
MyCo_CancelMenu();
if (!NTTM_TownMove("waypoint"))
return "NTTM_TownMove()";
if (!MyMo_TakeWaypoint(107))
return "MyMo_TakeWaypoint()";
//----------------------------------------------------------> TT_mod
// 웨이로 이동 후 함성 받기
if (MyConfig_DiabloLeechBot != 0 && MyConfig_LeechBotTeleeName)
{
NTM_WalkTo(me.x+2, me.y+1);
if (!NTM_MakeTP())
return "NTM_MakeTP()";
MyLB_WriteCheckMessage("OUT");
var _player1, _player2;
for (var i = 1; i <= 20; i++) // 파티원 검사
{
_player1 = MyUn_GetPlayerUnit(MyConfig_LeechBotTeleeName, 1, true);
_player2 = MyUn_GetPlayerUnit(MyConfig_LeechBotWarcryName, 1, true);
if (_player1 && _player2)
break;
Delay(1000);
}
if (!_player1 || !_player2 )
return "MyUn_GetPlayerUnit()";
MyLB_WriteMessage("BO");
Delay(10000);
MyLB_WriteMessage("CHAOS");
MyTP_UsePortal(me.charname);
MyLB_WriteMessage("IN");
var _msg;
for (i = 1; i <= 60; i++)
{
_msg = MyIL_File("NTBot/MyData/LeechBot/LeechBotLeechMessage[" + MyConfig_LeechBotTeleeName + "].txt", 0);
Delay(1000);
if (_msg == "1" )
{
MyTP_UsePortal(MyConfig_LeechBotTeleeName)
NTM_MakeTP();
MyLB_WriteMessage("ATTACK");
MyAt_ClearPosition(20);
break;
}
}
if (!_msg)
return "LeechBotLeechMessage";
MyConfig_DiabloClear[1] = false;
MyConfig_DiabloClear[2] = true;
MyConfig_DiabloClear[3] = _MyAt_MONSTER_TYPE_ALL;
}
// <-------------------------------------------------- TT_mod
NTP_DoPrecast(true);
NTConfig_SnagRange = 0;
// 리버웨이부터 텔레 지점까지 이동은 삭제
//----------------------------------------------------------> TT_mod
/*
if (!MyMo_MoveTo(108, 7794, 5558, 2, MyConfig_DiabloClear[0], MyConfig_DiabloClear[3]))
return "MyMo_MoveTo()";
if (NTConfig_PublicMode)
{
MyConfig_DiabloClear[1] = true;
MyConfig_DiabloClear[2] = true;
MyConfig_DiabloClear[3] = _MyAt_MONSTER_TYPE_ALL;
if (MyConfig_DiabloHelp > 0)
{
Say("도움이 필요할 땐 \"ㄷ\", \"h\", \"H\"를 외칩니다!");
PlayerHelpMsg = 0;
}
}
*/
// <-------------------------------------------------- TT_mod
if (!MyConfig_DiabloClear[1])
MyConfig_DiabloClear[2] ? MyMo_MoveTo(me.areaid, 7792, 5292) : NTC_PingDelay(500);
else if (!MyDi_ClearPath())
return "MyDi_ClearPath()";
if (!MyDi_Seal())
return "MyDi_Seal()";
//----------------------------------------------------------> TT_mod
MyLB_WriteMessage("BO");
//4 QuestDrop Master 퀘드롭 기사만 디아 잡기 원하면 쫄을 마을로
Delay(4000);
MyLB_WriteMessage("IN");
// <-------------------------------------------------- TT_mod
if (!MyDi_KillDiablo())
return "MyDi_KillDiablo()";
MySI_PickItems();
if (NTConfig_PublicMode && MyConfig_DiabloMessage[0] && MyConfig_DiabloMessage.length > 1)
MyCo_Say(MyConfig_DiabloMessage, 1);
return "MyMain()";
}
*******************************************************
7-2. // 디아 잡기전 쫄사냥 멈추고 대기 위치로 이동 시키려면
\scripts\NTBot\bots\NTDiablo.ntj
# 7.에서
//----------------------------------------------------------> TT_mod
MyLB_WriteMessage("BO");
//4 QuestDrop Master 퀘드롭 기사만 디아 잡기 원하면 쫄을 마을로
Delay(4000);
MyLB_WriteMessage("IN");
// <-------------------------------------------------- TT_mod
부분 삭제.
var _PauseLeechBotB4Diakill = true; //추가
function MyDi_OpenVenomSeal(type)
{
..................................... // 실제로 이대로 붙여넣으면 안됩니다. 생략한다는 의미입니다.아래 코드를 찾아서 수정하세요.
for (j = (_isOpen1 && _isOpen2) ? -15 : 0; j < 10; j++)
{
Delay(200);
if (MyAt_KillBoss(_monsterName))
{
if (MyConfig_DiabloClear[2])
MyAt_ClearPosition(20, MyConfig_DiabloClear[3]);
if (MyConfig_DiabloLeechBot == 1)
MyLB_WriteMessage(me.areaid + "/" + 7762 + "/" + 5267);
// TT_mod ----------------------------------------------------------------------------- 추가
if (_PauseLeechBotB4Diakill)
{
Delay(2000);
MyLB_WriteMessage("PAUSE");
Delay(2000);
MyLB_WriteMessage(me.areaid + "/" + 7762 + "/" + 5267);
Delay(10000);
}
// TT_mod -----------------------------------------------------------------------------이상
MySI_PickItems();
................................
*****************************************************************************************
8. 방잡이 쫄 치킨 시 따라 나가기
\scripts\NTBot\tools\NTToolsThread.ntj
function NTMain()
{
Include("libs/common/NTCommon.ntl");
NTC_IncludeConfig("NTBot/char_configs");
NT_LoadConfig();
// <---------------------------------------------- TT_mod
Include("libs/common/MyUnit.ntl");
var _qdropMaster = false;
if (MyConfig_LeechBotGameMaker && me.charname == MyConfig_LeechBotAutoMaster)
_qdropMaster = true;
// ----------------------------------------------> TT_mod
if (NTConfig_Script.length < 1)
return;
My_Initialize();
var _LifeMax, _ManaMax;
var _merc;
var _player, _mypartyid;
var _area;
var _preAreaId = 0;
var _count = 0;
var _serverIp = (MyConfig_ManagerMsg == 4) ? ("[" + me.gameserverip.split(".")[3] + "] ") : "";
//Print("ÿc3Loaded ToolsThread script");
RegisterEvent(EVENT_SCRIPTMSG, My_EventScript);
_LifeMax = me.hpmax;
_ManaMax = me.mpmax;
while (true)
{
//추가<---------------------------------------------- TT_mod
if (_qdropMaster )
{
if (!MyUn_GetPlayer(MyConfig_LeechBotGameMaker))
{
SendCopyData("D2NT Manager", null, 7<<16, "yc1Go after the game maker.");
ExitGame();
return;
}
}
// ----------------------------------------------> TT_mod
*****************************************************************************************
좀 더 세세한 트윅이 필요하지만, 대강의 흐름은 이런 식입니다.
기존 퀘드롭/워크라이/디아런를 개조해서 사용해도 되지만,
쫄봇을 개조하면 모든 사냥터에 텔레 보내기/함성받기->다음 사냥터 연속 사냥 가능하기 때문에 올려봅니다.
오리 유저와 저처럼 콜투암/이니그마 없는 맨땅 시작 유저나 필요한 정보겠네요. :)
어제 음주 후에 하코에서 봇 시험하다가 망토 쓴 제 83 팔라 햄딘을 추모하며.......
++++++++
이 강좌에 대한 질문은 쪽지로 받지 않습니다. 스크립트 보내달라는 요청도 거절합니다.
스크립트 자료실 등록은 더 개선이 되고, 원저작자 님들의 허락이 있으면 그때 고려하겠습니다.