피닉스+드탈 킥씬 봇 스크립트 - 1차 [2010.11.5]
분류
봇관련
조회 수
1,499
추천 수
8
0. 히스토리
1. 개요
2. MyAttack.ntl 수정
3. 캐릭터설정이니 수정
4. 하고싶은말...
= 0. 히스토리 =
2010.11.5
*트랩신 호환성 테스트 완료. 기존 트랩신 스크립트는 잘 작동합니다.
= 1. 개요 =
날아다녀님 11차 버전을 기준으로 작성했습니다.
피닉스스트라이커+드래곤탈런을 기준으로 작동합니다.
아직 기존의 트랩신, 혼돈신과 호환해서 작동이 되는지는 테스트 안해봤습니다. - 킥씬+트랩신 형태로 된다는 의미가 아니라, 기존 작성한 트랩신, 혼돈신이 잘 돌아가는지 테스트가 필요하다는 뜻입니다 ^^.
테스트가 필요하지만 잘 돌아가리라 봅니다.
>> 기존 트랩씬으로 돌린 결과 잘 돌아갑니다.
싱글버전에서 테스트해서 액트보스급에 대해선 테스트를 안해봤지만, 아주 아토믹한 함수를 수정한거라 잘 돌아가리라 봅니다.
= 2. MyAttack.ntl 수정 =
우선 원본 MyAttack.ntl을 반드시 백업해놓으시기 바랍니다.
기존의 MyAt_AssassinCast함수를 MyAt_AssassinCastOld 로 이름을 바꾸시고 아래 내용을 기존 함수 위에 추가해 주세요.
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;
}
// 피닉신이라면
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. 캐릭터설정이니 수정 =
// 공격 설정하기 <-- 이 부분만 아래 내용으로 교체해 주시면 됩니다.
MyConfig_AttackSkill[0] = [-1, 0]; // 처음 한 번만 공격할 스킬
MyConfig_AttackSkill[1] = [280, 2]; // 대장 공격할 스킬
MyConfig_AttackSkill[2] = [255, 2]; // 1번 쿨타임 동안 공격할 스킬
MyConfig_AttackSkill[3] = [280, 2]; // 부하 공격할 스킬
MyConfig_AttackSkill[4] = [255, 2]; // 3번 쿨타임 동안 공격할 스킬
MyConfig_AttackSkill[5] = [280, 2]; // 1, 3번 저항 시 공격할 스킬
MyConfig_AttackSkill[6] = [255, 2]; // 5번 쿨타임 동안 공격할 스킬
MyConfig_AttackSkill[7] = [280, 2]; // 1, 3, 5번 저항 시 공격할 스킬
MyConfig_AttackSkill[8] = [255, 2]; // 7번 쿨타임 동안 공격할 스킬
= 4. 하고 싶은 말 =
모든내성을 커버하기 위해서 피닉스스트라이커를 선택했습니다.
어택스킬 인덱스 중에 2, 4, 6, 8 이 피니쉬스킬에 해당되고, 꼭 드탈아니래도 피니쉬되는 스킬로 지정해주시면 됩니다.
봇운용의 기본은 수수갑옷이신거 잘 아시죠? ^^.