트랩+타이거+드탈/드테 어쌔신 스크립트 날아다녀님 14차용 #3
분류
봇관련
조회 수
1,707
추천 수
19
14차 버전용입니다.
자세한 내용은 11차 버전용을 참고해 주시기 바랍니다.
11차와 크게 차이가 없더라고요. 그래도 혹시 모르니 올립니다.
== 0. 변경사항 ==
#3 [2010-11-11]
* 트랩깔고 보스가 죽을때까지 타이거킥만 해되는 부분 수정
- 타이거1/2/3 + 드탈/드테 이렇게 액션횟수가 20회 넘으면 트랩을 다시 깔고 난후 반복합니다.
#2 [2010-11-11]
* 안정성을 위해 스킬설정 변경 [원하시는걸로 ... ]
- 카오스 둠나이트, 언데드소울킬러 때문에 조무래기 공격시엔 마블쓰기로 설정했습니다.
- 물론 원하시는걸로 바꾸시면 됩니다.
== 1. 캐릭터 설정 ==
스킬부분을 아래 처럼 설정해 주세요.
MyConfig_AttackSkill[0] = [264, 27]; // 처음 한 번만 공격할 스킬 (클락 오브 쉐도우:내 디펜을 올려주고 몹들의 시야를 좁게 만드는 스킬)
MyConfig_AttackSkill[1] = [271, 27]; // 대장 공격할 스킬 (라이트닝 센트리)
MyConfig_AttackSkill[2] = [270, 2]; // 1번 쿨타임 동안 공격할 스킬 (드래곤테일)
MyConfig_AttackSkill[3] = [271, 27]; // 부하 공격할 스킬 (라이트닝 센트리)
MyConfig_AttackSkill[4] = [273, 27]; // 3번 쿨타임 동안 공격할 스킬 (마인드블라스트)
MyConfig_AttackSkill[5] = [-1, 27]; // 1, 3번 저항 시 공격할 스킬 (라이트닝 센트리)
MyConfig_AttackSkill[6] = [-1, 2]; // 5번 쿨타임 동안 공격할 스킬
MyConfig_AttackSkill[7] = [-1, 27]; // 1, 3, 5번 저항 시 공격할 스킬
MyConfig_AttackSkill[8] = [-1, 2]; // 7번 쿨타임 동안 공격할 스킬
== 2. MyAttack.ntl - MyAt_AssassinCast 함수 수정 ==
function MyAt_AssassinCast(target, isBoss, index, maxAttacks, conviction, sentryClassId)
{
var _iAttack = 0;
var _iRetry = 0;
var _attacks = isBoss ? 8 : 4;
var _isFlying = !isBoss && MyUn_IsFlying(target);
var _isVulture = !isBoss && MyUn_IsVulture(target);
var _targetHp = target.hp;
var _alreadyPU = me.GetStat(320);
var _fr = target.GetStat(39);
var _lr = target.GetStat(41);
var _cr = target.GetStat(43);
// 내성에 따른 챠징횟수를 정한다.
var _cn = 1;
if(_fr < 100 ) _cn = 1;
if(_lr < 100 ) _cn = 2;
if(_cr < 100 ) _cn = 3;
while (MyUn_CheckLife(target))
{
if (_iAttack > maxAttacks && maxAttacks > 0)
return false;
if (!MyAt_CheckCollision(target, isBoss, index, _isFlying, _isVulture))
return false;
if ((_iAttack % 3) == 0)
MyPr_CheckPrecast();
if (!MyUn_CheckLife(target))
return true;
if (target.GetState(53))
return false;
if (conviction > 0)
{
if (!MyAt_CheckConvictionResistance(target, index, conviction, _iAttack > 2))
return false;
}
// 트랩+타이거드탈신인 경우 index+1이 아닌 index값으로 드탈/드테가 넘어온다.
// 트랩신+드테(드탈) 이면
if(MyConfig_AttackSkill[index][0] == 270 || MyConfig_AttackSkill[index][0] == 255)
{
//Print("dfdfdf");
// 챠징값이 없으면 타이거스트라이커를 챠징을 합니다.
if(me.GetStat(318) >= 3)
{
// 피니쉬를 쓴다.
NTC_SwapWeapons(0);
NTC_CastSkill(MyConfig_AttackSkill[index][0], _NTA_SkillHand[index], target);
}
else
{
// 타이거스트라이커쓰기
//Print("tigerstriking");
NTC_SwapWeapons(0);
NTC_CastSkill(254, NTC_HAND_LEFT, target);
}
}
else if(MyConfig_AttackSkill[index][0] == 280)
{
// 피닉신이라면
if(_alreadyPU > 0)
{
//Print(" 진입전에 챠징이 이미 되어 있다면 일단 피니쉬 부터 한다. ");
// 피니쉬를 쓴다.
NTC_SwapWeapons(0);
NTC_CastSkill(MyConfig_AttackSkill[index + 1][0], _NTA_SkillHand[index + 1], target);
}
else
{
if(me.GetStat(320) == _cn)
{
// 피니쉬를 쓴다.
NTC_SwapWeapons(0);
NTC_CastSkill(MyConfig_AttackSkill[index + 1][0], _NTA_SkillHand[index + 1], target);
}
else
{
NTC_SwapWeapons(0);
NTC_CastSkill(MyConfig_AttackSkill[index][0], _NTA_SkillHand[index], target);
}
}
}
else
{
NTC_SwapWeapons(0);
NTC_CastSkill(MyConfig_AttackSkill[index][0], _NTA_SkillHand[index], target);
if (index == 0)
return !MyUn_CheckLife(target);
if (sentryClassId && MyUn_IsClass(sentryClassId, true, target, 20) < 5)
return !MyUn_CheckLife(target);
if (MyConfig_AttackSkill[index + 1][0] > -1 &&
me.GetSkillStatus(MyConfig_AttackSkill[index][0]) == 8 &&
MyAt_GetResistance(target, _NTA_SkillDamage[index + 1]) < 100)
{
if (MyConfig_AttackSkill[index + 1][0] == 151)
{
if (MyUn_IsWhirlwind(target))
{
if (MyAt_Whirlwind(target, isBoss, index + 1, maxAttacks, 4, 14, 4) == 1)
return true;
}
}
else
{
switch (MyConfig_AttackSkill[index + 1][0])
{
case 261: // Charged Bolt Sentry
case 262: // Wake of Fire
case 271: // Lightning Sentry
case 272: // Wake of Inferno
case 276: // Death Sentry
if (MyAt_AssassinTrap(target, isBoss, index + 1, maxAttacks, conviction) == 1)
return true;
break;
default:
do
{
if (!MyUn_CheckLife(target))
return true;
if (target.GetState(53))
return false;
if (!MyAt_CheckCollision(target, false, index + 1, _isFlying, _isVulture))
break;
if (me.GetSkillStatus(MyConfig_AttackSkill[index + 1][0]) != 8)
{
NTC_SwapWeapons(0);
NTC_CastSkill(MyConfig_AttackSkill[index + 1][0], _NTA_SkillHand[index + 1], target);
}
else
Delay(NTC_DELAY_FRAME);
} while (me.GetSkillStatus(MyConfig_AttackSkill[index][0]) == 8);
}
}
}
}
while (me.GetSkillStatus(MyConfig_AttackSkill[index][0]) == 8)
{
if (!MyUn_CheckLife(target))
return true;
Delay(NTC_DELAY_FRAME);
}
if(_alreadyPU)
{
_alreadyPU = me.GetStat(320);
//Print(" 진입전 피니쉬 시도 후 챠징값 은 : " + _alreadyPU);
}
if ((++_iAttack % _attacks) == 0 && maxAttacks > 0)
{
if (target.hp < _targetHp)
_targetHp = target.hp;
else if (_iRetry++ < (isBoss ? 2 : 1))
{
if (!MyMo_MoveTo(target.areaid, target.x + 1, target.y + 1, 0))
return false;
}
else
return false;
}
}
return true;
}
== 3. MyAttack.ntl - MyAt_AssassinTrap 함수 수정 ==
function MyAt_AssassinTrap(target, isBoss, index, maxAttacks, conviction)
{
var i;
var _unit;
var _classId, _range, _count;
var _isAttack, _isCorpse;
var _iAttack = 0;
var _attacks = isBoss ? 8 : 4;
var _isFlying = !isBoss && MyUn_IsFlying(target);
var _isVulture = !isBoss && MyUn_IsVulture(target);
switch (MyConfig_AttackSkill[index][0])
{
case 261: // Charged Bolt Sentry
_classId = 411;
break;
case 262: // Wake of Fire
_classId = 410;
break;
case 271: // Lightning Sentry
_classId = 412;
break;
case 272: // Wake of Inferno
_classId = 415;
break;
case 276: // Death Sentry
_range = 3;
_count = NTC_GetSkillLevel(276);
if (_count > 0)
{
for (i = 1; i < _count; i += 3)
_range++;
}
else
return 0;
_classId = 416;
break;
}
while (MyUn_CheckLife(target))
{
if (_iAttack++ > maxAttacks && maxAttacks > 0)
return -1;
if (target.GetState(53)) // Conversion
return 0;
if (MyConfig_AttackSkill[index][0] == 276)
{
_isCorpse = false;
_unit = NTC_FindUnit(NTC_UNIT_MONSTER);
if (_unit)
{
do
{
if (GetDistance(target, _unit) <= _range && MyUn_IsCorpse(_unit, 0))
{
_isCorpse = true;
break;
}
} while (_unit.GetNext());
}
if (!_isCorpse)
return -1;
}
else if (index == 5 && MyConfig_AttackSkill[isBoss ? 1 : 3][0] == 276)
{
if (MyAt_AssassinTrap(target, isBoss, isBoss ? 1 : 3, maxAttacks, conviction) == 1)
return 1;
}
if (!MyAt_CheckCollision(target, isBoss, index, _isFlying, _isVulture))
return 0;
_isAttack = false;
_count = ((index == 3 && MyConfig_AttackSkill[3][0] == 271) ? MyConfig_AssassinLightningSentry : 5) - MyUn_IsClass(_classId, true, target, MyConfig_AttackSkill[index][1]);
if (_count > 0)
{
NTC_SwapWeapons(0);
for (i = 0; i < _count; i++)
{
NTC_CastSkill(MyConfig_AttackSkill[index][0], _NTA_SkillHand[index], target);
if (!MyUn_CheckLife(target))
return 1;
if (target.GetState(53))
return 0;
}
_isAttack = true;
}
if (index == 3 && MyConfig_AttackSkill[3][0] == 271 && MyConfig_AssassinLightningSentry < 5)
{
_count = 5 - MyConfig_AssassinLightningSentry - MyUn_IsClass(416, true, target, MyConfig_AttackSkill[index][1]);
if (_count > 0)
{
NTC_SwapWeapons(0);
for (i = 0; i < _count; i++)
{
NTC_CastSkill(276, NTC_HAND_RIGHT, target);
if (!MyUn_CheckLife(target))
return 1;
if (target.GetState(53))
return 0;
}
_isAttack = true;
}
}
if (index == 0)
return (MyUn_CheckLife(target) ? -1 : 1);
// 트랩씬 쿨타임은 여기 2010-11-5
if(!_isAttack && (MyConfig_AttackSkill[index + 1][0] == 270 || MyConfig_AttackSkill[index + 1][0] == 255) )
{
// 바알처럼 강력한 몬스터의 경우엔 죽을때까지 때리는데 maxAttacks를 조정해야할듯
// 타겟이 죽으면 트루가 리턴되는 형태이다.
if (MyAt_AssassinCast(target, isBoss, index + 1, 20, conviction, _classId))
return 1;
_isAttack = true;
}
else
{
if (!_isAttack && MyConfig_AttackSkill[index + 1][0] > -1 && MyAt_GetResistance(target, _NTA_SkillDamage[index + 1]) < 100)
{
if (MyConfig_AttackSkill[index + 1][0] == 151)
{
if (MyAt_Whirlwind(target, isBoss, index + 1, maxAttacks, 4, 14, 4, index + 1) == 1)
return 1;
_isAttack = true;
}
else
{
switch (MyConfig_AttackSkill[index + 1][0])
{
case 257: // Blade Sentinel
case 261: // Charged Bolt Sentry
case 262: // Wake of Fire
case 271: // Lightning Sentry
case 272: // Wake of Inferno
case 276: // Death Sentry
break;
default:
if (MyAt_AssassinCast(target, isBoss, index + 1, maxAttacks, conviction, _classId))
return 1;
_isAttack = true;
}
}
}
}
if (!_isAttack)
Delay(200);
}
return 1;
}