봇이 물약이 없는데도 물약을 사지 않아요..에 대해
분류
봇관련
조회 수
1,344
추천 수
11
며칠 전에 어떤 분이 질문하셔서 거기에 장문의 답변(댓글 치곤) 을 했는데요,
끊임없이 질문글이 올라오는 걸로 봐서는 다들 검색을 하지 않으신다고 생각해서 강좌글로도 따로 뺍니다.
****
우선적으로, checksafe 함수를 통해 벨트가 비었는지 아닌지를 체크하는 것은 캐릭설정에서 하실 수 있는데,
그 부분은 가장~~~~ 아래쪽에 있습니다.
// Check self safe in field (NOT in town). Set to 0 if you won't
// 0x01 : Potion, 0x02 : Poison, 0x04 : Amplify Damage, 0x08 : Weaken, 0x10 : Iron Maiden, 0x20 : Decrepify, 0x40 : Lower Resist
NTConfig_CheckSelfSafe = 0x01|0x04|0x40;
이 부분인데요, 위에서처럼 0x01 을 추가시켜주시면 됩니다. 저기서 | 이부분은 OR 연산자인데, 헤븐리스톤님께서 비트 플래그 형태 비스무리하게 해당 변수를 설정하셨나봅니다. ... 뭐 이런 건 알 필요 없구요;;
이렇게 했을 때, 단점이 있습니다. 포션을 하나만 먹어도 checksafe 작동 시 타운에 갑니다.
이를 수정하기 위해서는 libs\common\NTTown.ntj 파일을 여셔서...
NTT_CheckBelt() 함수를 찾습니다.
이를 두 가지 방법으로 변환시켰습니다.
첫 번째 방법은 힐링포션 혹은 마나포션이 도합 7줄 이상 비었을 때 상점으로 가는 형태입니다.
function NTT_CheckBelt()
{
var _needpotions = false;
var _needamount = 0;
for(var i = 0 ; i < 4 ; i++)
{
_NTT_BeltColNeeded[i] = NTT_GetNeededPotionsColInt(NTConfig_BeltColType[i], i);
if(_NTT_BeltColNeeded[i] > 0 && NTConfig_BeltColType[i] != "rv")
{
_needpotions = true;
_needamount += _NTT_BeltColNeeded[i];
}
}
if(_needamount >= 7)
{
return true;
} else
{
return false;
}
//return _needpotions;
}
두 번째 방법은 각각의 줄에 대해 값을 차등적으로 주는 것입니다(날아다녀님 버전에서 제공되었었나요? 뭐 아무튼...)
function NTT_CheckBelt()
{
var _needpotions = false;
var _needAmount = new Array(4);
_needAmount[0] = 3;
_needAmount[1] = 3;
_needAmount[2] = 3;
_needAmount[3] = 3;
for(var i = 0 ; i < 4 ; i++)
{
_NTT_BeltColNeeded[i] = NTT_GetNeededPotionsColInt(NTConfig_BeltColType[i], i);
if(_NTT_BeltColNeeded[i] >= _needAmount[i] && NTConfig_BeltColType[i] != "rv")
{
_needpotions = true;
}
}
return _needpotions;
}
다음과 같이 쓰시면 됩니다.
_needAmount[0,1,2,3] 은 각각 벨트 첫/두/세/네 번째 줄에서 얼마나 비었으면 사러 가느냐를 가리킵니다. 즉, 저 값이 3일 경우, 벨트의 해당 줄에서 세 칸이 비었을 경우 상점에 가는 형태죠.
두 패턴 중 하나를 선택하셔서 함수에 통째로 옮기시면 됩니다.