2기사로 카우방 함께 돌리기
분류
봇관련
조회 수
2,365
추천 수
15
글을 시작하기 전에!
전 날아다녀님 D2NT3.1을 구글링을 통해 얻었습니다. 두루네 가입한지는 오래되었으나 글을 많이 쓰지 않은 관계로 렙이 안되는 까닭이고요..
그래도 두루네 좋아하고 활동도 열심히 하고 있으니 너무 미워하지는 말아 주세요 ^^;
그냥 자료실에 파일을 올리는게 가장 편하겠으나 역시 렙이 안되는 관계로, 또한 저처럼 카우방을 2기사 이상으로 빨리 돌고자 하는 분들이 계실지 몰라 여기에 올립니다.
2기사로 봇 돌리는 방법은 다른 분들의 팁을 참고하시고요~
========================================================================
2기사로 디아바알런을 포함한 다른 사냥터를 같이 도는 방법은 순서를 같이 돌기만 하면 되기 때문에 크게 어려운 부분은 없습니다.
하지만 카우방의 경우에는 script자체가 족을 찾아 포탈을 여는 것부터 시작하기 때문에 2기사(또는 그 이상) 체제로 돌리려고 할때 나중에 족을 찾으러 가는 기사의 경우에는 에러가 뜨더군요.
카우방을 혼자 쓰는 것도 가능 하지만, 2기사로 하게 되면 시간도 절약되고 디아바알런 마무리를 카우방으로 할 수 있게 되므로 여러모로 좋습니다. 더군다나 카우방은 재료템의 창고죠! ㅎㅎ
서론이 길었네요
순서대로 따라하시면 됩니다
가정
=====
1기사(방을 만드는 봇), 2기사(만든 방에 조인하는 봇)체제라고 하겠습니다. 3기사 이상은 2기사와 똑같이 설정하시면 됩니다.
1기사가 족을 배달해 포탈을 열고 2기사나 그 이상은 열린 포탈로 따라 들어가 함께 사냥하는 구조입니다.
방법
=====
1. 1기사 캐릭이니를 엽니다. 특별히 설정하실 것은 없겠으나 포탈을 여는 위치는 반드시 [stash앞]으로 설정하십시오.
NTConfig_Script.push("MySecretCowLevel.ntj"); // 카우봇
MyConfig_SecretCowLevelGriswold = false; //
MyConfig_SecretCowLevelChicken = 127; //
MyConfig_SecretCowLevelPortalXy = 0; // (*)
MyConfig_SecretCowLevelOpenPortal = false; //
(*) 부분을 0으로 설정하시란 소리입니다.
2. \scripts\NTBot\bots 에 가셔서 MySecretCowLevel.ntj 의 사본을 같은 폴더에 만듭니다. 저 같은 경우는 복사해서 MySecretCowLevel_BB.ntj 로 저장했습니다
3. 2기사 캐릭이니로 갑니다.
NTConfig_Script.push("MySecretCowLevel_BB.ntj"); // (*)
MyConfig_SecretCowLevelGriswold = false; //
MyConfig_SecretCowLevelChicken = 127; //
MyConfig_SecretCowLevelPortalXy = 0; // (*)
MyConfig_SecretCowLevelOpenPortal = false; //
(*) 친 부분의 파일명을 저장한 파일명으로 수정해주셔야겠죠.
4. 이제 \scripts\NTBot\bots 에 가셔서 방금전에 저장한 MySecretCowLevel_BB.ntj 파일을 연후 CTRL+A&delete!
모두 지워버립니다.
5. 모두 지워진 것을 확인한 이후 아래것을 복사해 붙여넣고 저장해주면 됩니다.(그대로 긁어서 붙여 넣으세요)
function MyMain()
{
Delay(15000);
MyVi_TownManager();
_MyCu_isTelekinesisStash = false;
if (!MySC_MakeCowPortal())
{
_MyCu_isTelekinesisStash = true;
return "MySC_MakeCowPortal()";
}
if (MyConfig_SecretCowLevelOpenPortal)
return "MyMain()";
_MyCu_isTelekinesisStash = true;
NTP_DoPrecast(true);
if (!MySC_ClearRooms(_MyAt_MONSTER_TYPE_ALL, 150, NTC_UNIT_MONSTER, 773, 100))
{
NTC_StopScript("NTToolsThread_MySecretCowLevel.ntj");
return "MySC_ClearRooms()";
}
NTC_StopScript("NTToolsThread_MySecretCowLevel.ntj");
Delay(2000);
return "MyMain()";
}
function MySC_MakeCowPortal()
{
var _preX, _preY;
var _fire;
//MyCo_CancelMenu();
if (!NTTM_CheckAct(1))
return false;
if (!NTTM_TownMove("stash"))
return false;
_preX = me.x;
_preY = me.y;
if (GetDistance(me.x, me.y, _preX, _preY) > 7)
{
if (!MyMo_MoveTo(me.areaid, _preX, _preY))
return false;
}
Load("NTBot/tools/NTToolsThread_MySecretCowLevel.ntj");
return MyTP_UsePortal("", 15, 10);
}
function MySC_ClearRooms(specType, range, unitType, unitId, distance)
{
var i;
var _units;
var _preRoom;
var _count;
var _addRooms = new Array();
var _removeRooms = new Array();
if (distance)
{
_units = GetPresetUnits(me.areaid, unitType, unitId);
if (!_units || _units.length < 1)
return false;
}
_preRoom = GetRoom();
if (!_preRoom)
return false;
do
{
if (!distance || GetDistance(_preRoom.x * 5, _preRoom.y * 5, _units[0].roomx * 5, _units[0].roomy * 5) > distance)
_addRooms.push([_preRoom.x * 5, _preRoom.y * 5]);
} while (_preRoom.GetNext());
_count = _addRooms.length;
_preRoom = [me.x, me.y];
while (_addRooms.length > 0)
{
_addRooms.sort(function (a, b) { return (GetDistance(_preRoom[0], _preRoom[1], a[0], a[1]) - GetDistance(_preRoom[0], _preRoom[1], b[0], b[1])); });
_removeRooms.push([_addRooms[0][0], _addRooms[0][1]]);
for (i = 1; i < _addRooms.length; i++)
{
if (GetDistance(_preRoom[0], _preRoom[1], _addRooms[i][0], _addRooms[i][1]) <= GetDistance(_preRoom[0], _preRoom[1], _addRooms[0][0], _addRooms[0][1]))
_removeRooms.push([_addRooms[i][0], _addRooms[i][1]]);
else
break;
}
if (_removeRooms.length > 1)
{
_removeRooms.sort(function (a, b) { return (b[0] - a[0]); });
if (_removeRooms[0][0] <= _preRoom[0])
{
_removeRooms.sort(function (a, b) { return (b[1] - a[1]); });
if (_removeRooms[0][1] <= _preRoom[1])
{
_removeRooms.sort(function (a, b) { return (a[0] - b[0]); });
if (_removeRooms[0][0] >= _preRoom[0])
_removeRooms.sort(function (a, b) { return (a[1] - b[1]); });
}
}
}
if (!range || GetDistance(me.x, me.y, _removeRooms[0][0], _removeRooms[0][1]) < range)
{
if (MyMo_MoveTo(me.areaid, _removeRooms[0][0], _removeRooms[0][1], 2, true, specType))
_preRoom = _removeRooms[0];
}
for (i = 0; i < _addRooms.length; i++)
{
if (_addRooms[i][0] == _removeRooms[0][0] && _addRooms[i][1] == _removeRooms[0][1])
{
_addRooms.splice(i, 1);
Say("!사냥 완료 [" + (_count - _addRooms.length) + "/" + _count + "]");
break;
}
}
_removeRooms.length = 0;
}
return true;
}
자! 끝났습니다 (붙여넣는 부분은 위에 까지 인거 아시죠? ㅎㅎ)
맨 위의 Delay 함수는 1기사가 포탈을 여는 시간이 넉넉잡아 15초 정도면 충분하기 때문에 15초를 설정해놓은 것이고요..
만약 그 시간동안 그냥 기다리기 싫고 2기사는 다른방에서 앵벌을 하실거라면(ex:안다, 메피) Delay함수부분은 주석처리하시면 되겠습니다.
디아나 바알을 먼저 할 경우 1기사는 바로 카우방을 시작하게 하시고 2기사 이상은 다른 앵벌장소를 돌게 하셔서 2기사의 카우방 script가 시작할때 포탈이 열려져 있게 하셔도 됩니다. [2기사가 카우봇 시작한 이후 스태쉬앞에 도착할때까지 포탈이 열려져 있기만 하면 됩니다]
Delay 시간 조절이나 다른 앵벌 장소는 모니터링 하셔서 조절하시면 되겠습니다. 1기사가 그 이전방에서 아이템을 많이 먹어 정리하거나할 경우 카우포탈을 오픈하는 시점이 늦어지기 때문에 감안하셔서 모니터링 하십시오.
봇 좀 만질 줄 아시는 분들이 보시면 허접하게 수정한거지만...전 1시간 넘게 걸렸답니다 ㅠㅠ
그럼~즐댜하세요
모르는 부분 질문 주시면 제가 아는 한 답해 드리겠습니다