[NT봇] 파볼오브소서 카운테스(Countess) 오류팁
분류
봇관련
조회 수
3,660
추천 수
8
안녕하세요 이제좀 날씨가 많이 더워진것 같습니다. 다들 잘 지내시는지요 ^^
먼저 어줍잖은 실력에 정강란에 글을 올리게 되서 우려반 쑥스러움 반이더군요 ~
하지만 cossy 님의 요청도 있고 그리고 별거 아니지만 저와 같은 문제들을 겪었던 다른분들에게
저처럼 삽질하고 해매지 마시라는 뜻에서 작은 팁하나 올리겠습니다. 고수분들께서는 너그러이 봐주시길 ^^
먼저 이건 파볼오브소서에 대해서만 해당되는 사항임을 밝혀둡니다 (핸딘 체라소서는 해당사항 없어요^^)
1.카운테스 에러란?
파볼오브소서로 봇을 돌리다보면 가끔 로그를 보면(사실은 거의 대부분입니다) 오류를 내면서 카운테스를
몇대 때리다 말고 마을로 도망가는 경우가 생깁니다. 이 현상이 항상 일어났더라면은 진작 고수님들에게
파훼가 되서 고쳐졌겠지만 아마도 제 생각으로는 고렙파볼오브소서일수록 이 현상의 빈도수가 줄어들거라
고 예상합니다.. 그 원인은 아래에
2.원인
정확한 원인인지는 잘 모르겠지만 스크립트 코드를 상위로직에서부터 최하위로직까지 찾아본
결과 카운테스 에러라는 부분이 일어나는 부분을 알게되었습니다. 그 에러를 내는 부분은 아래와
같습니다.
NTAttack.dbl 430번째줄 (원본기준)
if(boss)
{
if((_maxattacks % 4) == 0 && target.hp >= _prehp)
{
if(target.classid == 526)
return false;
}
if((_maxattacks % 8) == 0)
{
if(target.hp < _prehp)
_prehp = target.hp;
else
return false; <---- 이부분이 카운테스 에러를 유발합니다.
}
}
else
{
if((_maxattacks % 4) == 0)
{
if(target.hp < _prehp)
_prehp = target.hp;
else
return false;
}
}
대충 설명을 드리자면 _maxattacks 는 소서리스가 타겟에 대한 공격횟수이고 target.hp는 타겟의 hp , _prehp
는 초기의 적의 hp를 저장한것입니다. 이제 감이 오시죠 ~ _maxattacks % 8이란것은 8번에 한번씩 검사를한다는 뜻이고 적의 hp가 8번전의 hp와 비교를 해서 피가 깍이면 _prehp에 현제의 hp를 저장하는것이고
만약의 반대의 경우(쉽게말해 8번동안 때렸는데 오히려 적의피가 차는경우) 봇이 케릭의 보호를 위해 잡을수
없는 적이라고 판단하고 오류를 내는것이지요.
이현상은 제가 관찰한 결과 처음 소서가 카운테스를 타겟으로 삼고 첫파볼을 카운테스에게 날립니다. 그후 계속
연사하는 상황에서 주위몹들이 카운테스 앞을 가리게 되면 카운테스의 피 리젠으로 인해서 카운테스의 피가
올라가게 됩니다. 그러면 8번후에 봇은 카운테스의 피가 오히려 찾다고 판단을 하는것이죠
이것은 레벨이좀 낮은 파볼오브소서에게서 나오는데 이유는 파볼데미지가 낮고(낮나? -_-;) 카운테스의 파이어
흡수및 이뮨이 높아서 그런것 같았습니다 실제로 때려보니 피가 거의 않달더군요 ;;
3.해결
해결방법은 여러가지가 있을수 있겠죠. 처음에는 파이어 , 오브이뮨일 경우 문제가 되는줄 알고 그부분을수정
하려했지만 쓰레쉬소켓의 경우도 파볼오브이뮨일때가 많음에도 불구하고 쉽게 잡더군요 우리 용병이 ^^
그래서 카운테스의 경우도 좀 쉽게 처리하고자(꽁수를 쓴거죠 ^^;;) 카운테스일 경우 그냥 오류를 무시하는
프로그래밍으로 보면 최악의 예외처리를 하게되었습니다 ^^;; 코드는 아래와 같습니다.
if(boss)
{
if((_maxattacks % 4) == 0 && target.hp >= _prehp)
{
if(target.classid == 526)
return false;
}
if((_maxattacks % 8) == 0)
{
if(target.hp < _prehp)
_prehp = target.hp;
else
{ //
if(target.classid == 45){ //
print("Skip Countess Error"); //
} // 수정부분
else //
return false; //
} //
}
}
else
{
if((_maxattacks % 4) == 0)
{
if(target.hp < _prehp)
_prehp = target.hp;
else
return false;
}
}
수정부분에서 원래 return false; 부분을 만약 카운테스일경우(카운테스의 classid 는 45입니다) 오류를 무시
했다는 로그를 남기면서 그냥 무시해 버리는 로직입니다.
결국 이렇게 해본결과 카운테스는 주위의 몹이 강하지 않고 파볼에 다 처리되므로 결국 카운테스와 1:1 상황
이연출되더군요 파볼로는 데미지를 거의 못주지만 우리의 막강한 용병이 꼬챙이로 찔러서 처리하더군요 ^^
그리고 이후로 카운테스는 꼬박꼬박 잘 잡게 되었더랍니다ㅎㅎ
전 이미 봇을 전부 햄딘으로 바꿔서 이제 파볼오브소서를 않쓰지만 아마도 저처럼 초기에 맨땅하시려면 파볼
오브소서 밖에 없죠.. 그리고 그 어려운(?) 시절 믿을만한 앵벌코스라곤 메피와 핀들과 카운테스밖에 없었
던것 같았습니다.
중급룬이라도 주는 카운테스를 못잡아 고민하실 다른 맨땅님들에게 이글을 바칩니다(?) ^^;
ps . 혹시 꽁수가 아니라 제대로 고치시고 싶으신분은 NTAttack.dbl의 NTA_SorceressAttackInt() 함수에서
공격 타입을 바꾸셔야 할겁니다. 하지만 결국은 파볼오브소서의 공격타입중에 카운테스에게 유효한공격수단
이 없으니.. 고민좀 하셔야 할듯합니다 ^^
ps2. PIT도 이런식으로 고칠수 있지 않느냐 생각하시는 분이 계실지도 모르는데 위 코드의 바로 아래를 보시면
보스가 아닌경우에도 hp를 비교하는 로직이 있습니다. 하지만 피트는 이뮨몹들끼리 몸으로 가려주는상황이 많기때문에 잘못 손대면 피봅니다.. ㅠ ㅜ 유의하시길 바라며.