NT봇 자잘한 팁 - 추가(특정저주시 성소로 치료)
분류
봇관련
조회 수
2,650
추천 수
45
봇에 대해 저도 잘 몰라서 자주 질문하기도 하고, 가끔은 어줍잖은 답변 하기도 합니다.
여기 쓰는 것도 고수분이 보기에는 참 하찮은 것이겠지만,
저처럼 초보분들이 참고하시면 좋겠습니다.
이것 저것 자잘하게 손본게 좀 있지만, 지금 스크립이 워낙 잘나왔더라구요.
몇몇은 전에 제가 손본거와 비슷하게 적용되어서 사람 생각은 다 비슷하다 싶었습니다. ^^
=====================================================================
# 추가(06. 29)
1. 이동이나 사냥중 특정저주에 걸릴시 인근에 성소가 있으면 성소를 먹어 치료
이동이나 사냥중 저주에 걸렸을 때 인근에 성소가 있으면 성소를 먹어서 치료하면 좋겠다는 생각을 했었습니다.
오늘 좀 한가하여 적용해 보았습니다.
날아다녀님의 이동 중 성소먹기에 숟가락만 얹었습니다. ^^;
① 날아다녀님의 http://tradia.me/diablo2/download/52932 설치(글씨 클릭하면 다운로드 페이지 연결)
② MyCatchShrine.ntl 파일 수정
function MyCS_CatchShrine()
{
var _shrine = GetUnit(NTC_UNIT_OBJECT, _MyCS_SHRINE);
if(_shrine)
{
var _areaid, _x, _y;
do
{
if(_shrine.name == _MyCS_SHRINE && !_shrine.mode && ((MyConfig_CatchGemShrine && _MyCS_InventoryGemCount > 0 && _shrine.shrinetype == 18) || (MyConfig_CatchExperienceShrine && !me.GetState(137) && _shrine.shrinetype == 15)) && MyCS_CheckShrineCount(_shrine))
{
_areaid = me.areaid, _x = me.x, _y = me.y;
if(NTM_GetCloserInt(_shrine) && NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _shrine) && _shrine.shrinetype == 18)
{
NTSI_PickItems();
MyCS_CheckInventoryGem();
}
NTM_MoveTo(_areaid, _x, _y);
}
} while(_shrine.GetNext());
}
}
위 내용을 아래로 수정
function MyCS_CatchShrine()
{
var _shrine = GetUnit(NTC_UNIT_OBJECT, _MyCS_SHRINE);
if(_shrine)
{
var _areaid, _x, _y;
do
{
if(_shrine.name == _MyCS_SHRINE && !_shrine.mode && ((MyConfig_CatchGemShrine && _MyCS_InventoryGemCount > 0 && _shrine.shrinetype == 18) || (MyConfig_CatchExperienceShrine && !me.GetState(137) && _shrine.shrinetype == 15)) && MyCS_CheckShrineCount(_shrine) || _shrine.name == _MyCS_SHRINE && !_shrine.mode && MyConfig_WizardRemoveCurse && (me.GetState(9) || me.GetState(61)) && (_shrine.shrinetype == 6 || _shrine.shrinetype == 7 || _shrine.shrinetype == 8 || _shrine.shrinetype == 9 || _shrine.shrinetype == 10 || _shrine.shrinetype == 11 || _shrine.shrinetype == 12 || _shrine.shrinetype == 13 || _shrine.shrinetype == 14 || _shrine.shrinetype == 15) && MyCS_CheckShrineCount(_shrine) || _shrine.name == _MyCS_SHRINE && !_shrine.mode && MyConfig_WarriorRemoveCurse && (me.GetState(9) || me.GetState(19) || me.GetState(55) || me.GetState(60) || me.GetState(61)) && (_shrine.shrinetype == 6 || _shrine.shrinetype == 7 || _shrine.shrinetype == 8 || _shrine.shrinetype == 9 || _shrine.shrinetype == 10 || _shrine.shrinetype == 11 || _shrine.shrinetype == 12 || _shrine.shrinetype == 13 || _shrine.shrinetype == 14 || _shrine.shrinetype == 15) && MyCS_CheckShrineCount(_shrine)) //수정부분
{
_areaid = me.areaid, _x = me.x, _y = me.y;
if(NTM_GetCloserInt(_shrine) && NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _shrine) && _shrine.shrinetype == 18)
{
NTSI_PickItems();
MyCS_CheckInventoryGem();
}
NTM_MoveTo(_areaid, _x, _y);
}
} while(_shrine.GetNext());
}
}
③ 캐릭 설정 파일에 아래 부분 추가
function NT_LoadConfig()
{
//------------------------------------------------------------------------------
// Boss configuration
//------------------------------------------------------------------------------
MyConfig_WizardRemoveCurse = true; // Amplify Damage, Lower Resist 걸렸을때 주위에 성소 있으면 사용(법사캐릭용) true : 기능 사용, false : 미사용
MyConfig_WarriorRemoveCurse = false; // Amplify Damage, Weaken, Iron Maiden, Decrepify, Lower Resist 걸렸을때 주위에 성소 있으면 사용(근접 물리공격 전사캐릭용) true : 기능 사용, false : 미사용
.
.
.
.
=====================================================================
1. 디아창에 캐릭명 표시(1.8.3버전만 해당)
1.7.x 버전에서는 미니맵(오토맵)을 켜고 사냥하기에 방제를 캐릭명과 비슷하게 하여
구분하였으나, 1.8.x로 넘어오면서 미니맵을 켜지 않고 사냥하게 되어 디아창을 보고
한번에 어떤 캐릭인지 알수 없는 경우가 생깁니다.
해서 캐릭명을 표시 하도록 했습니다.
NTBotGame.ntj(아가씨님 0628자 기준)을 열어 아래 부분을 찾습니다.
SetStatusText("Running " + NTConfig_Script[CurScriptIndex]);
SetStatusText("Stopped " + NTConfig_Script[CurScriptIndex]);
전부 아래로 교체
SetStatusText(NTConfig_Script[CurScriptIndex] + " [" + me.charname + "]");
글자 제한이 있어 "Running"은 뺐습니다.
봇파일도 파일이 긴경우 짧게 수정 바랍니다.(확장자 미포함 16자 이내로)
계정명으로 표시하고 싶다면 me.charname 대신 me.account를 넣으면 됩니다.
그림 1-1 매니저 Status

그림 1-2 디아창 캐릭명 표시
2. 큐빙을 캐릭마다 서로 다르게 적용하는 방법
예로 캐릭명이 Honor인 캐릭의 렙이 96이고 아뮬을 크랩하고 싶고,
Glory 캐릭은 렙이 93으로 마찬가지로 아뮬을 크랩하고 싶을 때
각기 적용하는 법입니다.
먼저 Honor 캐릭 96렙에 맞춰 아뮬을 크랩하도록 설정하여 MyCubing1.ntl로 파일명을 정하고,
(재료가 되는 매직아뮬 숨렙을 84로 설정)
Glory 캐릭 93렙에 맞춰 크랩하도록 설정한 파일은 MyCubing2.ntl로 파일명을 정합니다.
(재료가 되는 매직아뮬 숨렙을 88로 설정)
NTCommon.ntl 파일을 열어서 아래와 같이 수정합니다.
// Include("common/MyCubing.ntl"); // 기존 파일 주석처리
if(me.charname == "Honor")// 추가
Include("common/MyCubing1.ntl"); // 추가
if(me.charname == "Glory") // 추가
Include("common/MyCubing2.ntl"); // 추가
봇돌이들 렙이 서로 달라 크랩재료로 주워야 할 아뮬렙이 각기 다를때
최저캐릭렙에 맞춰 버리면 재료의 숨렙이 너무 높아져 줍기 여의치 않기 때문에
각기 서로 다른 파일을 로딩하도록 하여 사용하고 있습니다.
참고로 크랩공식
int(캐릭렙/2) + int(재료숨렙/2) = alvl
2스킬이 아뮬에 붙을 때 접사렙(alvl)이 90입니다.
해서 96렙은 84숨렙이상의 매직아뮬을 크랩해야 2스킬이 붙을 가능성을 가지며,
93렙은 88숨렙이상의 매직아뮬을 크랩해야 2스킬이 가능해집니다.
사냥하다보면 아시겠지만, 88이상 숨렙 붙은 아뮬 줍기 쉽지 않습니다.
84숨렙이면 피트나, 하수도 같은 곳에서 나오므로 비교적 쉽게 구할수 있죠.
장갑(엘리트)이나 링은 뭐 적당히 숨렙 정해도 상관없습니다.(옵션에 따라 계산해 보지는 않았네요.)
3. 디아블로 스크립 위험한 곳에서 특정저주시 마을 귀환 치료
디아블로 사냥중 가장 무서운 경우가 1시씰몹(둠나이트)이 파낙 달고 나왔는데 앰플 걸려있는 경우,
(※ 앰플(앰플리파이데미지) : 네크로맨서의 저주로 물리리듀스 -100%, 즉 두배의 물리데미지)
5시씰몹(배넘로드)이 컨빅 달고 나왔는데 로워레지 걸려있을 경우라고 생각합니다.
1시씰을 열었을 때 앰플 걸렸을 경우 마을가서 치료하고 오도록 수정.
아가씨님 스크립을 기준으로 수정하면 아래와 같습니다.
function NT_OpenDeSeisSealInt(type)
{
var i, n;
var _attackpos = [7780, 5255, 7800, 5255, 7800, 5235, 7780, 5235];
var _monstername = GetLocaleString(2852);
if(NTConfig_ClearChaos == 1 || NTConfig_ClearChaos == 2)
{
NTP_DoPrecast();
for(i = 0 ; i < _attackpos.length ; i += 2)
{
NTM_MoveTo(me.areaid, _attackpos[i], _attackpos[i+1]);
NTA_ClearPosition(25, 0x04);
NTA_ClearPosition(25);
NTSI_PickItems();
}
}
if(NTConfig_ClearChaos == 3)
{
NTM_MoveTo(me.areaid, 7720, 5280, 3, true);
NTA_ClearPosition(20, 0x04);
NTA_ClearPosition(20);
NTSI_PickItems();
NTP_DoPrecast();
NTM_MoveTo(me.areaid, 7773, 5258, 3, true);
NTA_ClearPosition(20, 0x04);
NTA_ClearPosition(20);
NTSI_PickItems();
for( y = 5258; y > 5149; y -= 30)
{
for( x = 7773; x < 7811 ; x += 18)
{
NTM_MoveTo(me.areaid, x, y, 3, true);
NTA_ClearPosition(20, 0x04);
NTA_ClearPosition(20);
NTSI_PickItems();
}
}
}
for(i = 0 ; i < 3 ; i++)
{
if(type == 1)
{
NTM_MoveTo(me.areaid, 7787, 5194);
if(!NT_OpenSealInt(394, 7769, 5158))
{
NTM_MoveTo(me.areaid, 7771, 5199);
NT_OpenSealInt(394, 7775, 5159);
}
NTC_Delay(500);
//여기부터 앰플 걸리면 마을가서 치료
if(me.GetState(9))
{
var _prearea = me.areaid;
NTM_MoveToObject(me.areaid, NTC_UNIT_OBJECT, 394);
if(NTTM_CheckAct())
{
NTTMGR_TownManager(true);
NTTM_TownMove("portalspot");
NTM_UsePortal("BluePortal", _prearea);
if(NTConfig_PublicMode)
NTM_MakeTP();
}
}
//여기까지 추가
NTM_MoveTo(me.areaid,7787, 5194);
}
else
{
NT_OpenSealInt(394, 7810, 5156);
//여기부터 앰플 걸리면 마을가서 치료
if(me.GetState(9))
{
var _prearea = me.areaid;
NTM_MoveToObject(me.areaid, NTC_UNIT_OBJECT, 394);
if(NTTM_CheckAct())
{
NTTMGR_TownManager(true);
NTTM_TownMove("portalspot");
NTM_UsePortal("BluePortal", _prearea);
if(NTConfig_PublicMode)
NTM_MakeTP();
}
}
//여기까지 추가
NTM_MoveTo(me.areaid, 7770, 5169);
}
for(n = 0 ; n < 5 ; n++)
{
if(NTA_KillBoss(_monstername))
{
NTA_ClearPosition(30);
NTSI_PickItems();
if(NTConfig_ClearChaos == 0)
NTP_DoPrecast();
return NTM_MoveTo(me.areaid, 7800, 5255);
}
NTC_Delay(200);
}
}
return false;
}
5시씰을 열었을 때 로워레지 걸렸을 경우 마을가서 치료하고 오도록 수정.
이건 아가씨님 이번 스크립에 되어 있었네요.
몰랐었네요. ^^
해서 이 부분은 삭제.
=====================================================================
자리를 빌어 봇 제작 배포해 주시는 HeavenlyStone님,
스크립 제작 수정해주시는 Or7r^^I님, [無情]디아블러네님, 날아다녀님
모두 감사하다는 말 전합니다.