쫄봇 자동 텔레보내서 보쌈 - 안다/듀리엘[5/25리플확인하세요]
분류
봇관련
조회 수
2,441
추천 수
22
안녕하세요. 오리 카인입니다.
thething님 자료로 보쌈+카오스런 하고 있습니다.
thething님이 아랫글에서 허락해 주셔서 안다&듀리엘 텔레보내서 잡는 법 포스팅합니다.
비번방을 팔라/소서/바바 3케릭만 하기때문에 자주 랠따가 와서 보쌈까지 하고 있습니다.
바바 외에는 모두 공격합니다. 바바는 팔라와 근접해서 쫄하기때문에 기사에게 몹 몰리는걸 방지하고 있습니다.
=1차수정 : 텔레실패시 오류메시지후 바로 다음사냥터로 넘어가게
오더받고 홀리쉴드 시전하게
=2차수정 : 쫄들 포탈 잘 사들고 다니게 (타운매니저가 아닌 Leechbot.ntj에서 포탈체크)
=3차수정 : 쫄들 처음 방 들어와서 아이템 정리할때 포탈수 10개 이하시 사놓게
==================선행 조건======================
1. thething님 자료로 카오스런이 원활히 되고 있어야 됩니다.
2. D2NT3.1_NTBot4.2_3 날아다녀님 3차 수정봇입니다.
(여기에 thething님 자료 적용)
3. 3케릭이 협동해서 사냥합니다. 쫄 키우려고 하시는분에게는 비추천합니다.
쫄수는 2로 고정입니다. 1이나 3이상은 테스트해보지 못했습니다.
==================개조 방법======================
1. 케릭터.ntj 수정
NTConfig_Paladin_캐릭터이름.ntj 열어서 사냥터 추가해줍니다.
//----------------------------------------------------------TT_Mod
NTConfig_Script.push("MyAndariel.ntj"); // 안다리엘 안전하게 잡기
MyConfig_MyAndarielKill = 1; // 0: 원본 좌표/ 1: 머리 찍기/ 2: 입구 근처 상자 쌓여있는 곳
MyConfig_MyAndarielLeechBot = 2; // 0: 사용 안함/ 1: 쫄봇(멈춤)/ 2: 쫄봇(움직임)
MyConfig_MyAndarielAntidotePotion = 0; // 해독포션 사 먹기
NTConfig_Script.push("MyDuriel.ntj"); // 듀리얼 안전하게 잡기
MyConfig_MyDurielKill = 0; // 0: 맞짱/ 1: 거리 유지하기/ 2: 티리얼 있는 곳으로 유인하기
MyConfig_MyDurielLeechBot = 2; // 0: 사용 안함/ 1: 쫄봇(멈춤)/ 2: 쫄봇(움직임)
NTConfig_Script.push("MyMephisto.ntj"); // 메피스토 안전하게 잡기
MyConfig_MyMephistoKill = 0; // 0: 맞짱/ 1: 강 쪽으로 유인하기
MyConfig_MyMephistoCouncilMember = false; // 카운슬 멤버 잡기
MyConfig_MyMephistoLeechBot = 2; // 0: 사용 안함/ 1: 쫄봇(멈춤)/ 2: 쫄봇(움직임)
//-----------------------------------------------------------TT_mod
사냥 순서는 상관 없지만 듀리엘을 첫번째에 넣지 않기를 추천드립니다. 오더 못받을수 있습니다.
2. 1번 파일을 scripts\NTBot\bots 폴더에 압축을 풀어주세요.
(bots.jpg를 bots.zip로 확장자 변경해주세요. 강좌란이라 그런지 zip 확장자론 못올리네요.
(강제로 알집으로 열어도 됩니다.)
또는 아래 처럼 수정하셔도 됩니다. (1번 파일에는 모든 적용된 파일이 있습니다.)
===========안다리얼 scripts\NTBot\bots\MyAndariel.ntj==========
scripts\NTBot\bots\MyAndariel.ntj 파일 열고
아래 구문중 프레캐스트아래에
if (!NTTM_TownMove("waypoint"))
return "NTTM_TownMove()";
if (!MyMo_TakeWaypoint(35))
return "MyMo_TakeWaypoint()";
NTP_DoPrecast(true);
//----------------------------------------------------------> TT_mod
// 웨이로 이동 후 함성 받기
if (MyConfig_MyAndarielLeechBot != 0 && MyConfig_LeechBotTeleeName)
{
NTM_WalkTo(me.x+2, me.y+1);
if (!NTM_MakeTP())
return "NTM_MakeTP()";
Say("보쌈먹습니다 먼저 안다누님 보러갑니다.");
MyLB_WriteCheckMessage("OUT");
var _player1, _player2;
for (var i = 1; i <= 50; i++) // 파티원 검사 20초이던걸 50초로
{
_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("ANDA");
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 != "1")
return "Tele Fail:"+_msg;//탤레실패시
if (!_msg)
return "LeechBotLeechMessage";
}
// <-------------------------------------------------- TT_mod
//이동 부분 주석처리
/*
if (!MyMo_MoveToStairs([35, 36], [36, 37]))
return "MyMo_MoveToStairs()";
if (MyConfig_MyAndarielLeechBot != 0)
{
if (!MyMo_MoveTo(me.areaid, 22579, 9595))
return "MyMo_MoveTo()";
NTM_MakeTP();
if (!MyMo_MoveTo(me.areaid, 22571, 9588))
return "MyMo_MoveTo()";
MyLB_WriteCheckMessage((MyConfig_MyAndarielLeechBot == 1) ? "OUT" : "ATTACK");
MyConfig_MyAndarielKill = 2;
}
else if (!MyMo_MoveTo(me.areaid, 22580, 9596))
return "MyMo_MoveTo()";
*/
좀 더 아래로 내려와서
if (MyConfig_MyAndarielLeechBot != 0)
MyLB_WriteMessage("IN");
위 부분을 아래처럼 수정합니다.
if (MyConfig_MyAndarielLeechBot != 0)
{
MyLB_WriteMessage("ACT1");
Delay(5000); //쫄들 마을로 갈 시간 주기
}
===========듀리엘 scripts\NTBot\bots\MyDuriel.ntj==========
scripts\NTBot\bots\MyDuriel.ntj파일 열고
아래 if문 2개 다음 아래에
if (!NTTM_TownMove("waypoint"))
return "NTTM_TownMove()";
if (!MyMo_TakeWaypoint(46))
return "MyMo_TakeWaypoint()";
//----------------------------------------------------------> TT_mod
// 웨이로 이동 후 함성 받기
if (MyConfig_MyMephistoLeechBot != 0 && MyConfig_LeechBotTeleeName)
{
// NTM_WalkTo(me.x+2, me.y+1);
if (!NTM_MakeTP())
return "NTM_MakeTP()";
Say("보쌈먹습니다 듀리엘 보러갑니다.");
MyLB_WriteCheckMessage("OUT");
var _player1, _player2;
for (var i = 1; i <= 50; i++) // 파티원 검사 20초이던걸 50초로
{
_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("DURI");
NTP_DoPrecast(true);
Delay(1000);
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 != "1")
return "Tele Fail:"+_msg;//탤레실패시
if (!_msg)
return "LeechBotLeechMessage";
}
// <-------------------------------------------------- TT_mod
//이동 부분 주석처리
/*
_tombs = GetRoom();
if (!_tombs)
return "GetRoom()";
if(!MyMo_MoveToPresetUnit(me.areaid, NTC_UNIT_TILE, _tombs.correcttomb - 28))
return "MyMo_MoveToPresetUnit()";
_unit = NTC_FindUnit(NTC_UNIT_TILE, _tombs.correcttomb - 28, 5);
if(!_unit)
return "NTC_FindUnit()";
if(!NTM_TakeStair(_unit.subareaid))
return "NTM_TakeStair()";
if (!MyDu_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 152))
return "MyDu_MoveToPresetUnit()";
if (!MyDu_TakeStair(100))
return "MyDu_TakeStair()";
*/
if (MyConfig_MyDurielLeechBot != 0)
{
//포탈 새로 여는 부분 주석처리 NTM_MakeTP();
좀 더 아래로 내려와서
if (MyConfig_MyDurielLeechBot != 0)
MyLB_WriteMessage("IN");
위 부분을 아래처럼 수정합니다.
if (MyConfig_MyDurielLeechBot != 0)
{
MyLB_WriteMessage("ACT2");
Delay(5000); //쫄들 마을갈 시간 주기 1000=1초
}
===========리치봇 scripts\NTBot\bots\MyLeechBot.ntj==========
scripts\NTBot\bots\MyLeechBot.ntj 파일열고
ⓐ thething님 자료중 추가부분에 if문 주석처리
(기존 파티가 잘되던분들은 적용하지 않으셔도 됩니다.)
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
ⓑ 아래 내려와서 thething님 자료중 카오스 이동 아래에 추가
//-------------------------------------->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_카오스_생츄어리() 내 이동 방법 참고
// 이 외에도 모든 사냥터의 좌표를 알 수 있습니다.
//안다
//----------------------------------------------mod
case "ANDA": // 카타콤 4층으로 이동(텔레)
if (me.charname == MyConfig_LeechBotTeleeName)
{
if (!MyMo_MoveToStairs([35, 36], [36, 37]))
MyL_WriteMessage("MyMo_MoveToStairs()");
if (!MyMo_MoveTo(me.areaid, 22579, 9595))
return "MyMo_MoveTo()";
if (NTTM_CheckAct(1))
MyL_WriteMessage("1");
}
break;
//----------------------------------------------mod
//듀리엘
//---------------------------------------------ㅡmod
case "DURI": // 듀리엘방으로 이동(텔레)
if (me.charname == MyConfig_LeechBotTeleeName)
{
_tombs = GetRoom();
if (!_tombs)
MyL_WriteMessage("GetRoom()");
if(!MyMo_MoveToPresetUnit(me.areaid, NTC_UNIT_TILE, _tombs.correcttomb - 28))
MyL_WriteMessage("MyMo_MoveToPresetUnit()");
_unit = NTC_FindUnit(NTC_UNIT_TILE, _tombs.correcttomb - 28, 5);
if(!_unit)
MyL_WriteMessage("NTC_FindUnit()");
if(!NTM_TakeStair(_unit.subareaid))
MyL_WriteMessage("NTM_TakeStair()");
if (!MyDu_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 152))
MyL_WriteMessage("MyDu_MoveToPresetUnit()");
if (!MyDu_TakeStair(100))
MyL_WriteMessage("MyDu_TakeStair()");
if (NTTM_CheckAct(2))
MyL_WriteMessage("1");
}
break;
//----------------------------------------------mod
ⓒ 3개의 function을 가장 뒤에 복사해 넣습니다.
//---------------------------------------TT_mod
//듀리엘 방 찾아기기
function MyDu_TakeStair(classId)
{
var i;
var _unit = NTC_FindUnit(NTC_UNIT_OBJECT, classId, 50);
if (_unit)
{
var _preAreaId = me.areaid;
for (i = 0; i < 100; i++)
{
if ((i % 5) == 0)
{
if (NTC_GetSkillLevel(43) && MyMo_MoveCloseInt(_unit, 20))
NTC_CastSkill(43, NTC_HAND_RIGHT, _unit);
else if (NTM_GetCloserInt(_unit))
NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _unit);
}
Delay(100);
if (me.areaid != _preAreaId)
{
while (me.areaid == 0)
Delay(200);
if (me.areaid != _preAreaId)
{
NTC_PingDelay(NTConfig_AreaDelay);
return true;
}
else
return false;
}
}
}
return false;
}
function MyDu_CheckCoord(x, y)
{
var i;
var _unitX, _unitY;
var _coordList = [[0, x - 11, y - 11], [0, x - 11, y + 3], [0, x - 11, y + 15], [0, x + 7, y - 11], [0, x + 7, y + 3], [0, x + 7, y + 15]];
var _unit = NTC_FindUnit(NTC_UNIT_MONSTER, null, 5);
if (!_unit)
return false;
do
{
if (_unit.IsAttackable())
{
_unitX = _unit.x;
_unitY = _unit.y;
for (i = 0; i < 6; i++)
{
if (GetDistance(_coordList[i][1], _coordList[i][2], _unitX, _unitY) <= 6)
_coordList[i][0]++;
}
}
} while (_unit.GetNext());
_coordList.sort(function (a, b) { return (a[0] - b[0]); });
return MyMo_MoveTo(me.areaid, _coordList[0][1], _coordList[0][2]);
}
function MyDu_MoveToPresetUnit(areaId, unitType, classId, offsetX, offsetY, isClearPath, specType)
{
var i, j;
var _oldUnits, _newUnits;
if (arguments.length < 4) { offsetX = 0;
offsetY = 0; }
if (arguments.length < 6) isClearPath = false;
if (arguments.length < 7) specType = _MyAt_MONSTER_TYPE_ALL;
for (i = 0; i < 3; i++)
{
_oldUnits = GetPresetUnits(areaId, unitType);
if (_oldUnits)
{
for (j = 0; j < _oldUnits.length; j++)
{
if (_oldUnits[j].id == classId)
{
if (MoveTo(areaId, _oldUnits[j].roomx * 5 + _oldUnits[j].x + offsetX, _oldUnits[j].roomy * 5 + _oldUnits[j].y + offsetY, 3, isClearPath, specType))
return true;
else
{
switch (me.areaid)
{
case 29:
case 30:
case 31:
case 51:
case 52:
case 53:
case 54:
var _moveXy = [[30, 0], [0, 30], [-30, 0], [0, -30]];
for (i = 0; i < 4; i++)
{
while (true)
{
if (!NTM_TeleportTo(me.x + _moveXy[i][0], me.y + _moveXy[i][1]))
break;
if (MoveTo(areaId, _oldUnits[j].roomx * 5 + _oldUnits[j].x + offsetX, _oldUnits[j].roomy * 5 + _oldUnits[j].y + offsetY, 0, isClearPath, specType))
return true;
}
}
break;
}
return false;
}
}
}
}
if (i < 2)
Delay(500);
}
function MoveTo(areaId, x, y, retry, isClearPath, specType)
{
var i, j;
var _isTeleport;
var _path, _checkPath;
var _preX, _preY;
var _retry = 0;
if (MyConfig_AttackSkill[1] == 112 || MyConfig_AttackSkill[3] == 112)
{
if (me.x == x && me.y == y)
return true;
}
else if (Math.abs(me.x - x) < 2 && Math.abs(me.y - y) < 2)
return true;
if (arguments.length < 4) retry = 4;
if (arguments.length < 5) isClearPath = false;
if (arguments.length < 6) specType = _MyAt_MONSTER_TYPE_ALL;
if (NTC_InTown())
{
if (isClearPath)
return false;
_isTeleport = false;
isClearPath = false;
}
else if (NTC_GetSkillLevel(54))
_isTeleport = true;
else
{
MyMo_CheckEnigma();
if (NTC_GetSkillLevel(54))
_isTeleport = true;
else
return MyMo_RunTo(areaId, x, y, retry, isClearPath, specType);
}
_path = GetPath(areaId, me.x, me.y, x, y, _isTeleport);
if (!_path)
return (NTC_InTown() && (NTM_WalkTo(x, y) || NTTM_TownMoveXY(x, y)));
for (i = 0; i < _path.length; i++)
{
if ((i + 1) >= _path.length)
return MyDu_CheckCoord(x, y);
if (!isClearPath || !MyConfig_SafeHunting || MyUn_CheckCowKing() || MyUn_CheckSafe(_path[i][0], _path[i][1], 15, 5))
{
for (j = 0; j < 2; j++)
{
if (_isTeleport)
{
if (NTM_TeleportTo(_path[i][0], _path[i][1]))
break;
}
else if (NTM_WalkTo(_path[i][0], _path[i][1]))
break;
else if (NTTM_TownMoveXY(_path[i][0], _path[i][1]))
break;
}
if (j > 1)
{
if (_retry++ < retry)
{
_path = GetPath(areaId, me.x, me.y, x, y, _isTeleport);
if (_path)
{
i = -1;
continue;
}
}
return false;
}
}
else if (!MyMo_RunTo(me.areaid, _path[i][0], _path[i][1]))
return false;
if (isClearPath && !MyUn_CheckCowKing())
{
_preX = me.x;
_preY = me.y;
MyAt_ClearPosition(30, specType, true);
NTP_DoPrecast(false);
if (_isTeleport && (me.x != _preX || me.y != _preY) && (i + 1) < _path.length)
{
_checkPath = GetPath(me.areaid, me.x, me.y, _path[i + 1][0], _path[i + 1][1], _isTeleport);
if (_checkPath && _checkPath.length > 1)
{
if (!MyMo_MoveTo(me.areaid, _preX, _preY))
return false;
}
}
}
MyCS_CatchShrine();
}
return true;
}
return true;
}
//---------------------------------------TT_mod
==================리치봇 MyLeechBot.ntj======================
scripts\NTBot\bots\MyLeechBot.ntj 파일열고
ⓐ 포탈수가 부족하면 상점 들리게
function MyL_CheckPortal(count)
{
if (arguments.length < 1)
count = 4;
_NTTMGR_BuyTP = !MyTP_CheckBeltScroll() && NTTMGR_CheckScrolls(1) < count;
위 구문을 아래처럼 수정
function MyL_CheckPortal(count)
{
//주석처리 if (arguments.length < 1)
count = 10;
_NTTMGR_BuyTP = !MyTP_CheckBeltScroll() && NTTMGR_CheckScrolls(1) < count;
ⓑ 아이템 정리할때 포탈수 확인하고 사기
if (MyConfig_LeechBotItem[0])
{
StatusText[0] == 1 && MyCo_SetStatusText("ÿc4아이템 정리 중 (ÿc0...ÿc4)");
MyVi_TownManager(!MyConfig_LeechBotItem[1]);
}
위 구문을 아래처럼 수정
if (MyConfig_LeechBotItem[0])
{
StatusText[0] == 1 && MyCo_SetStatusText("ÿc4아이템 정리 중 (ÿc0...ÿc4)");
MyVi_TownManager(!MyConfig_LeechBotItem[1]);
MyL_CheckPortal(); //아이템 정리중 체크포탈
}
============================================================
주의 !!!!
1. 이 자료와 관련 없는 질문은 사절합니다.
2. 파일에는 아래 메피자료도 적용되어 있습니다. (1차수정메피 적용중)
3. 제 테스트 환경은 팔라/소서/바바 입니다.
팔라 11K햄딘/ 소서 오브파볼소서/ 바바 오더샤우트마스터
4. 수정하시기 전에 기존 봇폴더를 복사해놓으시길 추천드립니다.
special thk : thething 님
thething님이 더 완벽한 자료 올려주실거라 믿습니다.
ps : 5/17 포탈 문제 해결했습니다. 질문은 리플로 해주세요. 이 자료와 관련된 질문만 받습니다.
쫄봇 전체적인걸 물어 보시거나, 자료실 렙이 안되서 메일로 봇 보내달란분들 자중좀 해주세요;;